【发布时间】:2014-10-07 12:42:05
【问题描述】:
我尝试编译一个源代码包,发现了特定于版本的问题。
当我在计算机上执行此操作时,一切顺利;但是当我在另一台计算机上编译它时,它会产生很多未定义 INT32_MAX 的声明。两台电脑都运行 Debian 系统,不同的是我的电脑使用的是 Testing repo 并且有 gcc 4.9,而另一台电脑使用的是 Stable repo.,它的 gcc 4.7 稍旧。
然后我详细了解/usr/include/stdint.h。令人惊讶的是,在声称未定义宏的计算机上,所有 int 范围宏都定义在非 C++ 条件内:
/**
* I forget the exact definition,
* but it looks like this:
*/
#ifndef __cplusplus ......
......
# define INT32_MIN XXX
# define INT32_MAX XXX
......
#endif
因此,包不会看到这些标准范围宏,因为它是 C++ 项目,并且使用 g++ 进行编译。
为什么gcc 4.7的stdint.h是这样设计的?这是否意味着 gcc 4.7 不希望我在 C++ 中使用这些整数范围,而 gcc 4.9 允许?
最重要的是:我应该如何解决这个问题?
【问题讨论】:
-
如果包含
<cstdint>,你会得到同样的结果吗? -
std::numeric_limits. -
您需要在包含
stdint.h之前定义一些像__STDC_CONSTANT_MACROS这样的宏,以便在C++ 11 之前的C++ 中获得您想要的定义,请参阅C99 标准。
标签: c++ c macros compatibility glibc