Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336731
  • 博文数量: 79
  • 博客积分: 2466
  • 博客等级: 大尉
  • 技术积分: 880
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-07 16:47
文章分类

全部博文(79)

文章存档

2014年(3)

2012年(7)

2011年(14)

2010年(2)

2009年(2)

2008年(2)

2007年(18)

2006年(31)

分类: C/C++

2006-03-03 19:15:42

36- 宏替换不会发生在字符串中间。例如
#define YES yesman
printf("YES");
最后的运行结果是
YES
 
 
37- #undef的一个用法:用于确认一系列操作被定义为一个函数而不是一个宏。当你不确定某个后面带有括号的名字(例如getchar()),到底是一个宏定义还是一个函数定义的时候,可以在程序中加上
#undef getchar
这样如果getchar被定义为一个宏,编译的时候就会出错。
 
 
38- 如果一个宏的名字前面加了'#'符号,扩展出来的字符串两端会被自动加上双引号。例如:
#define dprint(expr) printf(#expr " = %g\n", expr)
如果在程序里出现了
dprint(x/y)
会被展开为
printf("x/y" " = %g\n", x/y);
并且在这种替换中,原来的宏参数中如果有\和",替换时前面会自动加上一个\形成一个escaped character,从而保证替换结果仍然是正确的。
 
 
39- 预处理操作符##提供的功能:用于连接宏参数。如果一个宏参数在对应的展开文字中和##相邻,那么,这个宏参数首先被用实际参数替代,然后##以及紧邻的空格被删除,之后结果被当作输入文件重新分析。例如
#define paste(front, back) front ## back
paste(counter, 2) = 0;
会被展开为
counter2 = 0;
 
40- 预处理操作符#if后面可以是任何常整数表达式,但是其中不允许出现:
sizeof
强制类型转换
enum类型的常量
阅读(791) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~