什麼是下面的語句的意思是:的#define標識符不令牌
#define FAHAD
我熟悉的像語句:
#define FAHAD 1
但什麼是無標記的#define語句意味着什麼? 它是否與常量定義類似?
什麼是下面的語句的意思是:的#define標識符不令牌
#define FAHAD
我熟悉的像語句:
#define FAHAD 1
但什麼是無標記的#define語句意味着什麼? 它是否與常量定義類似?
這意味着FAHAD
定義,你可以在以後,如果它的定義,或者不檢查:
#ifdef FAHAD
//do something
#else
//something else
#endif
或者:
#ifndef FAHAD //if not defined
//do something
#endif
現實生活中的例子使用的是檢查,如果一個函數或頭文件可用於您的平臺,通常構建系統會在實際編譯之前定義宏以指示某些函數或頭文件存在,例如,此檢查是否可用signal.h
:
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif/*HAVE_SIGNAL_H*/
該檢查,如果某些功能是可用的
#ifdef HAVE_SOME_FUNCTION
//use this function
#else
//else use another one
#endif
定義沒有值充當標誌提供給預處理器的常數,並且可以使用像這樣:
#define MY_FLAG
#ifdef MY_FLAG
/* If we defined MY_FLAG, we want this to be compiled */
#else
/* We did not define MY_FLAG, we want this to be compiled instead */
#endif
不限#define
導致用替換令牌替換原始標識符。如果沒有更換標記,更換爲空:
#define DEF_A "some stuff"
#define DEF_B 42
#define DEF_C
printf("%s is %d\n", DEF_A, DEF_B DEF_C);
擴展爲:
printf("%s is %d\n", "some stuff", 42);
我把42
和)
之間的空間來表示「無」是DEF_C
擴大到,但至少在語言方面,預處理器的輸出僅僅是一個令牌流。 (實際的編譯器通常會讓你看到預處理器的輸出,這裏是否有任何空格取決於實際的預處理器,對於GNU cpp,有一個。)
和其他答案一樣,你可以使用#ifdef
測試標識符是否爲#define
d。你也可以寫:
#if defined(DEF_C)
例如。這些測試是正面的(即,標識符是定義的),即使擴展是空的。
#define FAHAD
這會像一個編譯器標誌,在其下可以完成一些代碼。 這將指示編譯器來編譯在本代碼下此編譯器選項
#ifdef FAHAD
printf();
#else
/* NA */
#endif
同樣看到這個[鏈接](http://stackoverflow.com/questions/7594808/what-use-cases-necessitate-define-沒有令牌字符串)的答案。 –