0

是否有跨平台的方法来确定是否与预处理ptrdiff_t相同longlong long在预处理期间?

我知道__PTRDIFF_TYPE__应该用 gcc/g++ 给出类型,但它似乎没有在 Windows 的 VC/VC++ 中定义。有比以下更好的方法吗?

#ifndef __PTRDIFF_TYPE__
# if _WIN64
#  define __PTRDIFF_TYPE__ long long
# else
#  define __PTRDIFF_TYPE__ long
# endif
#endif

如果在预处理期间不可能,是否有编译时方法?我正在寻找一个非 C++11 的解决方案,但如果你有一个非常好的现代解决方案,请随时分享!

4

1 回答 1

2

编译时方法非常明显:

if (sizeof(ptrdiff_t) == sizeof(long))

或者

if (sizeof(ptrdiff_t) == sizeof(long long))

TMK,对此没有可移植的定义。然而,这只是一个小障碍。只需一点点脚本,任何这种性质的编译时测试都可以使用autoconfautomake等标准工具轻松转换为基本上基于预处理器的测试。这些是数千个免费软件库和工具使用的标准工具,用于此精确目的。

于 2015-12-22T03:03:30.603 回答