C语言的宏定义 #if defined 的作用
一、#if defined的作用
我们要检查a是否定义
#if defined a
#undef a
#define a 200
#endif
#ifndef a //如果a没有被定义
#define a 100
#endif
#undef为解除定义
#ifndef是if not defined的缩写,即如果没有定义
上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200
二、#if ! defined 的作用
#if defined XXX_XXX
#endif
是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。一般.h文件里最外层的
#if !defined XXX_XXX
#define XXX_XXX
#endif
是为了防止这个.h头文件被重复include
#ifdef的使用和#if defined()的用法一致
#ifndef又和#if !defined()的用法一致。
三、指令 用途
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息
四、相等判断
有没有办法检查宏中的数字相等性?
我想做点什么
#define choice 3 #if choice == 3 .... #endif #if choice == 4 ... #endif
C宏是否支持这样的事情?
确实应该有效。 见http://gcc.gnu.org/onlinedocs/cpp/If.html#If
该引用是准确的,但以“标准格式”编写:抽象地没有示例。
编写代码的另一种方法是使用链式#elif指令:
#if choice == 3 ... #elif choice == 4 ... #else #error Unsupported choice setting #endif
请注意,如果choice不是#defined ,则预处理器会将其视为值为0 。
据我所知,应该工作。 你用的是什么编译器?
PS:仅供参考,定义名称通常用大写字母书写!
#define CHOICE 3
五、多条件判断
1.“与”判断 (即判断多个宏是否同时定义)
#if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
#endif /* curl_socket_typedef */
2.“或”判断(即判断多个宏是否有其中一个定义)
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
(defined(__FreeBSD_version) && (__FreeBSD_version < 800000))
#include <sys/select.h>
#endif
2.“非”判断(即判断多个宏是否同时都没有定义)
#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
#include <sys/time.h>
#endif

浙公网安备 33010602011771号