__PTRDIFF_TYPE__ 的跨平台版本

Cross platform version of __PTRDIFF_TYPE__

有没有一种跨平台的方法来判断在预处理过程中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 解决方案,但如果您有非常好的现代解决方案,请随时分享!

编译时的方法很明显:

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

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

TMK,没有可移植的定义。然而,这只是一个小障碍。只需编写一点脚本,使用 autoconf and automake 等标准工具,任何这种性质的编译时测试都可以简单地转换为本质上基于预处理器的测试。这些是数以千计的免费软件库和工具使用的标准工具,正是为了这个目的。