南昌网站推广公司,北京做网站的公司,广东朝阳企讯通科技有限公司,热点 做网站和营销 我只服他From: http://blog.chinaunix.net/space.php?uid16135252doblogid2752917
内核中有很多的宏定义#xff0c;在宏定义define中经常看到两个字符串##和##xff0c;这里把它的用法做一下说明#xff1a; ##是一个连接符号#xff0c;用于把参数连在一起 …From: http://blog.chinaunix.net/space.php?uid16135252doblogid2752917
内核中有很多的宏定义在宏定义define中经常看到两个字符串##和#这里把它的用法做一下说明 ##是一个连接符号用于把参数连在一起 例如 #define FOO(arg) my##arg 则 FOO(abc) 相当于 myabc #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串 例如 #define STRCPY(dst, src) strcpy(dst, #src) 则 STRCPY(buff, abc) 相当于 strcpy(buff, abc) 另外如果##后的参数本身也是一个宏的话##会阻止这个宏的展开。 #define STRCPY(a, b) strcpy(a ## _p, #b) int main() { char var1_p[20]; char var2_p[30]; strcpy(var1_p, aaaa); strcpy(var2_p, bbbb); STRCPY(var1, var2); STRCPY(var2, var1); printf(var1 %s\n, var1_p); printf(var2 %s\n, var2_p); return 0; /* 注意这里 */ STRCPY(STRCPY(var1,var2),var2); /* 这里是否会展开为 strcpy(strcpy(var1_p,var2)_p,var2“ * 答案是否定的 * 展开结果将是 strcpy(STRCPY(var1,var2)_p,var2) * ## 阻止了参数的宏展开! * 如果宏定义里没有用到 # 和 ##, 宏将会完全展开 */ }