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

你可能感兴趣的:(C++复习)