C的预编译指令#的一个应用

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  如果你经常用心的去琢磨写东西的话,那么你会有很多发现,今天给大家看看我的一个发, 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,这几个方法组合在一起,灵活应用,会产生很多有意思的效果。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答