【C语言】条件编译中几个define的含义

#ifndef OSKIT  
#define OSKIT  //这两句的具体含义是什么?

#define STATS
#ifdef STATS  //这两句的具体含义是什么?

这是一个C头文件中的代码,知道是用于条件编译,但一直不明白确切含义。
还有个问题:这些语句算宏吗?
多谢!

阅读 6.8k
1 个回答

第一个一般用于防止头文件重复引用。字面意思是如果没有定义xxx,那么定义xxx 也就是说第一遍执行这一段的时候会定义xxx宏,第二次执行相同语句的话因为刚才已经定义过了,就无法满足ifndef自然不会执行块内语句。 用法如下

#ifndef ABC_H    //如果已经定义了ABC_H到这里就会引发判断,就不会编译下面的代码
#define ABC_H    //如果从未定义过,我们就定义,这两个结合使用可以保证被包含的内容只被编译器执行一次
//头文件内容
#endif

第二个一般用于屏蔽语句。其实你吧define那句去掉了再看的话意思就是如果定义了states下面的语句就有效,否则救无效 比如我们经常用这样的方式去注释代码

#if 0
//无用的代码
#endif

换过来,如果用#if 1的话就是代表这段代码有效了。 通过这种方式,你就可以通过编译时定义不同的宏的方式来让不同代码生效了 再举个例子:跨平台的c语言代码常有这样的片段

#ifdef  LINUX_KERNEL
//linux下的api
#endif
#ifdef  WIN32
//windows下的api
#endif

上面两段代码做同样的事情,但是在不同平台下需要去调不同的api 这样的做法可以让我们在编译linux运行版本时,在编译时定义宏LINUX_KERNEL来实现linuxapi调用 在编译windows运行版本时,定义宏WIN32.是不是很方便,否则的话,不同的版本你需要写不同的代码,超级麻烦的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进