__PTRDIFF_TYPE__的跨平台版本

Cross platform version of __PTRDIFF_TYPE__

本文关键字:版本 跨平台 TYPE PTRDIFF      更新时间:2023-10-16

在预处理过程中,是否有跨平台的方法来确定ptrdiff_tlonglong long相同?

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

#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和automake等标准工具轻松地转换为基于预处理器的测试。这些是成千上万的自由软件库和工具所使用的标准工具,用于这个精确的目的。