编译宏以测试uint64_t和无符号长整型之间的差异

Compiler macro to test difference between uint64_t and unsigned long long int

本文关键字:长整型 无符号 之间 测试 uint64 编译      更新时间:2023-10-16

我有C++11代码无法编译,因为重载函数被重新定义为与参数相同的类型:

char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }

有没有一个编译器宏,我可以添加它来检查这两个基元之间的相等性,然后在编译前删除第二个基元(如果相等)?

还有其他函数返回其他类型的字符指针。例如,添加它不会给我带来任何麻烦,即使signedunsigned long long int使用相同数量的字节:

char const* foo(long long int) { return "%lld"; }

因此,检查一个类型使用了多少内存似乎是不够的。其他方法是什么?

您可以使用climitscstdint:中的定义来检查这些类型的最大值

#include <climits>
#include <cstdint>
char const* foo(uint64_t) { return "%" PRIu64; }
//ULLONG_MAX defined in climits, UINT64_MAX in cstdint
#if ULLONG_MAX != UINT64_MAX
char const* foo(unsigned long long int) { return "%llu"; }
#endif

然而,使用模板创建一个系统可能是一个更好的长期解决方案。