跨平台版__PTRDIFF_TYPE__

时间:2015-12-22 02:57:52

标签: c++ c visual-c++ c-preprocessor ptrdiff-t

在预处理过程中是否有跨平台方式确定ptrdiff_t是否与longlong long相同?

我知道__PTRDIFF_TYPE__应该为gcc / g ++提供类型,但似乎没有在VC / VC ++ for Windows中定义。有没有比以下更好的方法?

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

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

1 个答案:

答案 0 :(得分:2)

编译时方法非常明显:

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

if (sizeof(ptrdiff_t) == sizeof(long long))
TMK,没有便携式定义。然而,这只是一个小障碍。只需一点脚本,任何这种性质的编译时测试都可以使用autoconfautomake之类的标准工具轻松转换为基于预处理器的测试。这些是数千个免费软件库和工具使用的标准工具,用于此目的。