c++預定義的一些宏以及用法

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章