首页 > 代码库 > 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__
????源文件编译时间,格式微"hh:mm:ss"
????__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++点滴