1 #ifdef、#ifndef
(1)基本格式
1)格式
· #ifdef
#ifdef 宏 ... #endif
#ifdef是以宏存不存在(有没有定义)来判断真假的,如果宏
存在:真,保留代码
不存在:假,不保留代码
· #ifndef
#ifndef 宏 ... #endif
情况刚好与#ifdef相反,如果宏
不存在:为真,保留代码
存在:为假,不保留这个代码
2)例子
#define WINDOWS_XP //这是一个无宏体宏 #ifdef WINDOWS_XP printf("procedure word needed by windows_xp\n"); #endif #ifndef LINUX printf("procedure word needed by Linux\n"); #endif
疑问:可不可以给#ifdef 指定有宏体的宏?
当然可以,
#define WINDOWS_XP 0 #ifdef WINDOWS_XP printf("procedure word needed by windows_xp\n"); #endif
这里指定宏体没有太大意义,因为#ifdef和#ifndef是靠判断宏名是否存在来判断真假的。
(2)搭配#else
1)格式
#ifdef 宏 //#ifnedf 宏 ... ... #else ... ... #endif
二选一。
2)例子
#ifdef WINDOWS_XP //#ifndef WINDOWS_XP printf("procedure word needed by Windows_xp\n"); #else printf("procedure word needed by Linux\n"); #endif
(3)与#elif
错误写法
#ifdef *** ... #elif #ifdef ... #endif
这个是错误的写法,#elif #ifdef会导致在一行里面有两个预编译关键字,我们我们前面说过,在每行只能有一个预编译关键字
正确写法:
#ifdef *** ... #elif 1 // NUM == 100 ... #endif