2012-09-26 63 views
1

我想,當我的代碼被編譯(C和C++)的特定值分配給一個變量:一個值分配給在編​​譯時的可變

例如具有:

//test.c 
int main() 
{ 
    int x = MYTRICK ; (edit: changed __MYTRICK__ to MYTRICK to follow advices in comment) 
    printf ("%d\n", x); 

    return 0; 
} 

beeing能夠做這樣的事情:

gcc -XXX MYTRICK=44 test.c -o test 

,並具有結果:

$./test 
44 
+0

請參閱http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html,並在他的回答中尋找作爲** ouah **提及的-D選項 – rkosegi

+3

以兩個下劃線開頭或以下劃線開頭的名稱後面加大寫,留給執行。 –

+0

您絕對不能使用雙下劃線,也不要使用標記中的前導下劃線大寫。這些*保留*。 –

回答

5

使用-D選項:

gcc -DMYTRICK=44 test.c -o test 

而且使用MYTRICK宏在你的程序,而不是__MYTRICK__。以__開頭的名稱由實現保留。

+0

謝謝! (實際上它是關於我的代碼的「gcc -D__MYTRICK __ = 44 test.c -o test」) – IggY

+0

你可能想在你的程序中加入'#ifndef MYTRICK \ n #define MYTRICK *默認值* \ n #endif'程序,以便它仍然編譯沒有-D標誌。 (或者你也許沒有。) –

+0

@IggY雖然使用這個保留名稱很少有機會會導致問題,但爲什麼不把它做對,然後稱之爲IGGYS_TRICK? –

相關問題