开发者社区 问答 正文

条件编译中几个define的含义

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

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

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

展开
收起
a123456678 2016-06-06 09:21:37 2132 分享 版权
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
    2019-07-17 19:27:33
    赞同 展开评论
问答地址: