2013-07-09 80 views
-1

我不知道是否是有可能以某種方式做出這樣的事情在C/C++:#定義一個變量值?預處理指令

int a = 5; 
#define A a 
printf("%s\n", A); // should print 5 (value of 'a' variable) 

好吧,這個代碼給我分割故障(Windows 7的代碼::塊):

#include <stdio.h> 

int main() 
{ 
    int a = 5; 
    #define A a 

    #if defined(A) 
     printf("%d\n", A); 
    #endif 

    return 0; 
} 
+0

爲了你的問題是像樣的,應該說什麼行不通。如果您的問題是此代碼無法正常工作,則應該減少此代碼。注意'printf(「%s \ n」,5);'可能會做同樣的事情。 – chris

+3

爲什麼'%s',而不是'%d'? [使用'%d'只需要工作](http://ideone.com/6QkSkt)。 – dasblinkenlight

+0

如果你試圖編譯你寫的東西,你會得到你的答案(也可以用%d替換%s)。 –

回答

1

某些編碼風格可以爲您節省很多錯誤,包括上面的錯誤。

在實際應用中,你WONT知道宏將是什麼,所以這將是很難%S%d之間做出選擇。

有時候不是問題,而是通向他們的信念。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 例子:

這是一個不好的編碼風格:

#include <stdio.h> 

int main() 
{ 
    int a = 5; 
    #define A a 

    #if defined(A) 
     printf("%d\n", A); 
    #endif 

    return 0; 
} 

這是一個可容忍*編碼風格

int main() 
{ 
    #ifdef WIN32 
     #define a 5 
    #elif defined __unix__ 
     #define a 6 
    #endif 

    int A = a; 

    printf("%d\n",A); 

    return 0; 
} 
  • 取決於編碼政策你的團隊。


這是首選的編碼風格:

int main() 
{ 
    int A = 6; 

    #ifdef WIN32 
     A = 5; // Windows hate 6 and *nix. 
    #endif 

    printf("%d\n",A); 

    return 0; 
} 
+0

_'這是一種可以忍受的編碼風格'_可爭辯! –

+0

@ g-makulik這取決於你團隊的*政策*。我的團隊傾向於使用盡可能少的宏。 –

+1

你是正義的人;)。我總是試圖使用動態或靜態多態技術抽象出這些東西(如操作系統相關的實現)。 –

4

您需要使用%d而不是%s

printf("%d\n", A); 

檢查this出來,它的工作原理!