用于将后缀追加到无符号长文本的宏
Macro for appending suffix to unsigned long long literal
我正在使用一个定义如下常量的库:
#define SOME_BIG_CONSTANT 0x0000000100000000
这个文字太大而无法表示为long
,所以任何使用此宏的程序都无法编译(使用 gcc 4.1.2 for VxWorks(。有效的(非标准,但受此编译器支持(解决方案是将后缀ull
添加到文本:
#define SOME_BIG_CONSTANT 0x0000000100000000ull
但是,这将需要我修改库标题,而我宁愿不这样做。我不喜欢宏,所以我的问题是,我如何定义一个会添加该后缀的宏,我可以这样称呼它:
ULL_(SOME_BIG_CONSTANT)
这将扩展到:
0x0000000100000000ull
ull 是 C++11 的标准后缀。
另一方面,您可以定义以下宏:
#define APPEND(x, y) x ## y
#define ULL(x) APPEND(x, ull)
现在,您可以使用:
int main()
{
unsigned long long a = ULL(SOME_BIG_CONSTANT);
return 0;
}
#define ULL_2(NUM) NUM ## ull
#define ULL_(NUM) ULL_2(NUM)
应该做这项工作。(注:未经测试(
需要第二个宏来触发传递的宏的宏扩展。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 使用无符号字符设置文本格式
- 为什么 std::(i)ostream 将有符号/无符号字符视为文本而不是整数
- 用于将后缀追加到无符号长文本的宏
- Win32 API:如何使编辑文本仅在c++中接受无符号浮点数
- 从文件读取文本到无符号字符数组
- 从文件读取文本到无符号字符数组,在尝试使用示例时出错