首页 > 代码库 > c++点滴

c++点滴

1\\ C++宏:

????(1)#作用是将其后面的宏参数进行字符串化操作(Stringfication;

????eg: #define WARN_IF(EXP)????

???? do{ if (EXP)????

????????????????fprintf(stderr, "Warning: " #EXP "\n"); }???

??????? ?while(0)

????WERN_IF(value =http://www.mamicode.com/= 0);>

????//展开后为:

????do{

????????if (value =http://www.mamicode.com/= 0)>

????????fprintf(stderr,"Warning: valude == 0");

????}while(0);

????(2)##连接器(concatenator),用来将两个Token(记号)连接为一个Token,作用对象不再限于宏参数,也可以连用

????????#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name(重定义struct name##__的指针类型为name)

????DECLARE_HANDLE(hWnd);

????hWnd hd;

????将得到一个结构体指针;

????--------------------------------------

????:凡宏定义中有###的地方,宏参数不会被展开

????#define A 2;

????#define PARAM(A) #A##_;

????printf("%s",PARAM(A));

????得到printf("%s",A_);????// compile error

????宏参数A不会被展开为期望的2_????

????(3)C语言预定义宏:

????__DATE__
????
进行预处理的日期("Mmm dd yyyy"形式的字符串文字)

????__FILE__
????
代表当前源代码文件名的字符串文字

????__LINE__
????
代表当前源代码中的行号的整数常量

????__TIME__
????
源文件编译时间,格式微"hhmmss"

????__FUNCTION__(__fucn__)
????
当前所在函数名?

????__DATE__, __TIME__确实打印的是build时的时间, 如果rebuild程序, __DATE__, __TIME__也随之改变了

2\\typedef:

????struct INT__

????{

????????int a;

????};

????typedef INT__* pit;???????? //重定义INT__指针类型为pit

????typedef INT__ it;

????pit pt = NULL;

????pt->a = 1000;

c++点滴