gpt4 book ai didi

c++ - stdint.h 与 C++ 不兼容?

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:31 24 4
gpt4 key购买 nike

我尝试编译一个源代码包,发现版本问题。

当我在计算机上执行此操作时,一切顺利;但是当我在另一台计算机上编译它时,它会产生很多未定义 INT32_MAX 的声明。两台计算机都运行 Debian 系统,不同之处在于我的计算机使用测试库并具有 gcc 4.9,而另一台计算机使用稳定库,具有稍旧的 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 允许它?

最重要的是:我应该如何解决这个问题?

最佳答案

在 C++ 中,建议您使用 std::numeric_limits #include <limits> :

使用示例来自 cplusplus.com

// numeric_limits example
#include <iostream> // std::cout
#include <limits> // std::numeric_limits

int main () {
std::cout << std::boolalpha;
std::cout << "Minimum value for int: " << std::numeric_limits<int>::min() << '\n';
std::cout << "Maximum value for int: " << std::numeric_limits<int>::max() << '\n';
std::cout << "int is signed: " << std::numeric_limits<int>::is_signed << '\n';
std::cout << "Non-sign bits in int: " << std::numeric_limits<int>::digits << '\n';
std::cout << "int has infinity: " << std::numeric_limits<int>::has_infinity << '\n';
return 0;
}

关于c++ - stdint.h 与 C++ 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com