【发布时间】:2016-03-28 05:48:52
【问题描述】:
预处理时是否有跨平台的方法来判断ptrdiff_t是否与long或long 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 的解决方案,但如果你有一个非常好的现代解决方案,请随时分享!
【问题讨论】:
-
为什么需要知道?在标准库中定义
ptrdiff_t的意义在于您不必关心它是如何定义的。 -
我正在尝试将 Python2
PyIntObject转换为ptrdiff_t,并且有不同的方法可以将其转换为long和long long。我想从技术上讲,long long 方法总是可行的,但它并不那么干净,因为 Python 在内部将值存储在 long 中。 -
请将该信息添加到问题中。你有一个XY problem。您需要将
PyIntObject转换为ptrdiff_t,但不是询问这个问题,而是询问如何确定ptrdiff_t使用哪种类型。 (顺便说一句,ptrdiff_t不一定是long或long long,但在任何支持 Python 的平台上都可能是其中一个。)
标签: c++ c visual-c++ c-preprocessor ptrdiff-t