C的预编译指令#的一个应用
来源:优易学  2011-2-12 20:00:44   【优易学:中国教育考试门户网】   资料下载   IT书店
 如果你经常用心的去琢磨写东西的话,那么你会有很多发现,今天给大家看看我的一个发, C的预编译指令\"#\"的一个应用。
  #ifndef __EXAMPLE_H
  #define __EXAMPLE_H 1
  typedef struct example_st{
  char name[1024] ;
  } example_t ;
  example_t example ;
  #define PRINT_EXAMPLE(a) printf(#a \" = %s \\n\" , example.a)
  #endif/** __EXAMPLE_H */
  在原来的代码中,是这样定义的:
  #define PRINT_EXAMPLE(a) (printf(#a \" = %s \\n\" , example.##a))
  #a的含义是用宏a来代替一个字符串,比如PRINT_EXAMPLE(name) = printf(\"name = %s \\n\" , example.a) ,这个用法比较少,但还是蛮有用的。
  结构成员name,如果用example.##a,那么就会提示告警:
  warning: pasting \".\" and \"name1\" does not give a valid preprocessing token
  对编译器来说,由于\".\"或者\"->\"分隔符号的存在,宏a被视为一个独立的符号,所以使用\"##“会有问题的,可以直接使用宏a来替换。但编译的结果也是正确的。
  宏MACRO ,#MACRO,##MACRO,这几个方法组合在一起,灵活应用,会产生很多有意思的效果。

责任编辑:小草

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