编译时中的整数值
Integer values in compile time
我必须在具有一些整数ID的不同文件中写入一些常量。例如:
#define MESSAGE_FIRST 0
在其他文件中:
#define MESSAGE_ANOTHER 1
有什么方法可以在编译时自动获取该 id?像这样:
#define MESSAGE_AUTO GetNextId()
我不能在这里使用枚举,因为此指令将位于不同的文件中。
谢谢。
p.s. GCC, Linux
你可以做一个编译时计数器,继承和函数重载:
template<unsigned int n> struct Count { bool data[n]; };
template<int n> struct Counter : public Counter<n-1> {};
template<> struct Counter<0> {};
Count<1> GetCount(Counter<1>);
#define MAX_COUNTER_NUM 64
#define COUNTER_VALUE (sizeof(GetCount(Counter<MAX_COUNTER_NUM + 1>())) / sizeof(bool))
#define INC_COUNTER Count<COUNTER_VALUE + 1> GetCount(Counter<COUNTER_VALUE + 1>);
你可以在这里看到它的实际效果。也适用于 msvc。
你说你正在使用GCC。GCC 具有称为 __COUNTER__
的(AFAIK 每个文件)宏,每次使用后递增 1。
请注意,这是一个扩展,不包含在标准C++中。
另一种选择是使用枚举:
enum {
FIRST = 0,
SECOND,
THIRD
};
或者,您可以使用预处理器指令手动执行此操作,如下所示:
#define FIRST 0
#define SECOND (1 + FIRST)
#define THIRD (1 + SECOND)
相关文章:
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 通过编译时值推断整数的类型
- 如何在 C++11 编译时构建具有递增值的整数成员的结构序列
- 调用 Parse int 函数时编译 parse 整数程序时出现问题
- 在 C++11 中打印编译时整数序列
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C++编译错误(有符号和无符号整数表达式之间的比较)
- 函数编译,即使它不接受整数
- 编译器用于编译 128 位整数的基本算术运算的技巧
- C++ 计算编译时常量,同时防止整数常量溢出
- 使用整数模板参数创建编译时双精度
- 在编译时将类型转换为整数
- 在编译时以 static_assert() 格式显示整数
- 如何在编译时将整数模板参数修改为非零值
- 编译时间递归函数以计算两个整数的下一个功能
- 从文字字符串生成编译时常量整数
- 在编译时计算小整数的阶乘
- 生成编译时整数范围时类型不完整
- 编译时生成一个省略的整数序列
- C++指针与整数比较编译错误