#if #elif #define typedef 使用时的注意事项
2015-04-23 23:41
363 查看
假设有如下代码需要兼容三个版本
这样无法完成任务的
无论
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
运行结果都一样
但是这样就可以完成任务了
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
都可以得到想要的结果
为什么呢?????
通过 分析发现当使用枚举的方法时:
NUM FIRST SECOND THIRD都 #define为空,所以无论怎么
#define NUM
三者是相等的
查阅相关资料,最终在《UINX 高级编程环境》 第3版,P219页中 “在 Linux 中 ACORE 和 AXSIG 会计相标志,被定义为 enum 类型,而在 #ifdef 表达式中不能使用 eunm 类型值”可知原因。
这样无法完成任务的
无论
typedef enum{ FIRST, SECOND, THIRD, }; #define NUM THIRD #if (NUM == FIRST) #define VAR 1 #elif(NUM == SECOND) #define VAR 2 #elif(NUM == THIRD) #define VAR 3 #endif int main(void) { #if (NUM == FIRST) printf("VAL = %d\n",VAR); #elif(NUM == SECOND) printf("VAL = %d\n",VAR); #elif(NUM == THIRD) printf("VAL = %d\n",VAR); #endif }
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
运行结果都一样
但是这样就可以完成任务了
#define FIRST 1 #define SECOND 2 #define THIRD 3 #define NUM THIRD #if (NUM == FIRST) #define VAR 1 #elif(NUM == SECOND) #define VAR 2 #elif(NUM == THIRD) #define VAR 3 #endif int main(void) { #if (NUM == FIRST) printf("VAL = %d\n",VAR); #elif(NUM == SECOND) printf("VAL = %d\n",VAR); #elif(NUM == THIRD) printf("VAL = %d\n",VAR); #endif }
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
都可以得到想要的结果
为什么呢?????
通过 分析发现当使用枚举的方法时:
NUM FIRST SECOND THIRD都 #define为空,所以无论怎么
#define NUM
三者是相等的
查阅相关资料,最终在《UINX 高级编程环境》 第3版,P219页中 “在 Linux 中 ACORE 和 AXSIG 会计相标志,被定义为 enum 类型,而在 #ifdef 表达式中不能使用 eunm 类型值”可知原因。
相关文章推荐
- 【Fragment使用】(三)使用fragment的几个常见注意事项(重要)
- 代理模式使用场合与注意事项
- Navicat for MySQL 使用手册及注意事项
- google glog在程序中使用方法与注意事项
- swift 函数使用注意事项
- Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项
- Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
- 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
- sscanf 函数使用注意事项
- jquery中settimeout与setInterval使用时的注意事项
- [android]关于SharedPreferences putString和commit的使用注意事项
- Delphi 模式窗体返回值ModalResult的使用方法及注意事项(转)
- nios DMA使用注意事项
- 使用平台的注意事项
- 使用C++实现JNI接口需要注意的事项
- dojo中gridContainer使用时的注意事项
- ListView嵌套GridView使用详解及注意事项
- 使用lua虚拟机的一个注意事项
- 微信开源工具AndResGuard-资源混淆工具的使用及注意事项
- MySQL索引类型总结和使用技巧以及注意事项