#ifndef OSKIT
#define OSKIT //这两句的具体含义是什么?
#define STATS
#ifdef STATS //这两句的具体含义是什么?
这是一个C头文件中的代码,知道是用于条件编译,但一直不明白确切含义。
还有个问题:这些语句算宏吗?
多谢!
#ifndef OSKIT
#define OSKIT //这两句的具体含义是什么?
#define STATS
#ifdef STATS //这两句的具体含义是什么?
这是一个C头文件中的代码,知道是用于条件编译,但一直不明白确切含义。
还有个问题:这些语句算宏吗?
多谢!
1 回答3.3k 阅读
1.1k 阅读
1 回答513 阅读
第一个一般用于防止头文件重复引用。字面意思是如果没有定义xxx,那么定义xxx 也就是说第一遍执行这一段的时候会定义xxx宏,第二次执行相同语句的话因为刚才已经定义过了,就无法满足ifndef自然不会执行块内语句。 用法如下
第二个一般用于屏蔽语句。其实你吧define那句去掉了再看的话意思就是如果定义了states下面的语句就有效,否则救无效 比如我们经常用这样的方式去注释代码
换过来,如果用#if 1的话就是代表这段代码有效了。 通过这种方式,你就可以通过编译时定义不同的宏的方式来让不同代码生效了 再举个例子:跨平台的c语言代码常有这样的片段
上面两段代码做同样的事情,但是在不同平台下需要去调不同的api 这样的做法可以让我们在编译linux运行版本时,在编译时定义宏LINUX_KERNEL来实现linuxapi调用 在编译windows运行版本时,定义宏WIN32.是不是很方便,否则的话,不同的版本你需要写不同的代码,超级麻烦的。