C/C++预处理表达式中可接受的内容
来源:互联网 发布:java工资很高吗 编辑:程序博客网 时间:2024/05/14 00:54
因为C++里推荐用枚举来代替宏定义,因而在C++代码中都很少使用宏定义。
但是现在碰到一个需求,就是希望在编译的时候知道两个常数是否一致(比如两个版本号),第一反应就是用#if,但是结果发现#if根本不能接受enum, 甚至不能接受const:
//============CLASS ENUM==========class A { enum { CLASS_ENUM_A = 1 };};class B { enum { CLASS_ENUM_B = 2 };};#if A::ENUM_A != B::ENUM_B//error: token "::" is not valid in preprocessor expressions| #error "class enum A != B"#endif // A//===================NORMAL ENUM========================enum { ENUM_A = 1, ENUM_B = 2};#if ENUM_A != ENUM_B// 直接忽略 #error "enum A != B"#endif // A//====================CONST===============================const int constA = 1;const int constB = 10;#if constA != constB// 直接忽略 #error "const A != B"#endif // constA//=======================DEFINE==============================#define defineA 1#define defineB 2#if defineA != define// OK #error "define A != B"#endif // defineA
因为预处理基本上就是宏定义展开,对程序内容和结构并没有处理,所以并不知道某个常数值为多少,某个枚举值为多少,更不知道存在某个类,因而只能接受宏定义。
话说有没有某种方法可以在编译后判断程序里某个常数值的范围?
0 0
- C/C++预处理表达式中可接受的内容
- 可接受任意类型数据的C语言链表
- C 中预处理命令
- C语言预处理中#和##的应用
- Linux中C语言的预处理
- C的预处理器
- C的预处理工作
- C语言的预处理
- c的预处理器
- C语言的预处理
- C语言的预处理
- c/c++的预处理
- C语言的预处理
- c程序的预处理
- 巧用C语言中预处理
- C语言中《预处理》小结
- C语言预处理中#和##
- c中预处理简谈
- OFBiz 开发需要用到的几个重要(配置)文件
- 【Codeforces Round 367 (Div 2) C】【简单DP】Hard problem
- 路迹
- 贪心算法
- 图解分析一个dNet进销存软件
- C/C++预处理表达式中可接受的内容
- java压缩编码之GZIP
- 深入理解Java虚拟机之Class类文件的结构
- Apache2配置虚拟主机
- OFBIZ 分页代码
- 进阶项目12-链表的拆分
- 裴波那契数列的递归实现与非递归实现
- 前端开发用到的东西
- 分支限界法