CPlusPlus中的預定義和宏定義
宏定義中的變長參數以及__VA_ARGS__宏
示例:
//定義
#define LOG(...) {\
printf("%s : Line %d:\t", __FILE__, __LINE__); \
printf(__VA_ARGS__);\
printf("\n"); \
}
//調用
int x = 3;
LOG("x = %d", x);
//輸出
..\main.cpp : Line 16: x = 3
可以看到__FILE__展開成成字符串,指示出當前代碼所在文件。__LINE__展開成int型,指示當前所在行號。__VA_ARGS__被"…"符號原樣代替,保持原來的數據類型
宏__cplusplus
在生成庫的工程中常常能看到如下的代碼
#ifdef __cplusplus
extern "C" {
#endif
//一些代碼
#ifdef __cplusplus
}
#endif
__cplusplus宏其實是一個整型值,可以用該宏檢驗當前編譯器是C++編譯器還是C編譯器。C++編譯器會對變量名、函數名等符號重整,而extern "C"對這種重整的抑制。這樣有利於項目的移植
宏#和##
#是轉字符串
##是鏈接
示例:
#define ADD(x, y) x##y
#define TRAN(x) #x
int main(int argc, char *argv[]){
std::cout << "start" << std::endl;
std::cout << ADD(12, 12) << std::endl;
int a = 12;
std::cout << TRAN(a) << std::endl;
return 0;
}
//輸出:
> start
> 1212
> a