C语言中如何使用宏包括单双井号可变参数
来源:优易学  2010-1-14 10:52:41   【优易学:中国教育考试门户网】   资料下载   IT书店

  C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。

  关于#和##

  在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:

  #define WARN_IF(EXP) \

  do{ if (EXP) \

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

  while(0)

  那么实际使用中会出现下面所示的替换过程:

  WARN_IF (divider == 0);

  被替换为

  do {

  if (divider == 0)

  fprintf(stderr, "Warning" "divider == 0" "\n");

  } while(0);

  这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。

  而##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。那么下面的代码就非常实用:

  struct command

  {

  char * name;

  void (*function) (void);

  };

[1] [2] [3] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训