- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试编译一个源代码包,发现版本问题。
当我在计算机上执行此操作时,一切顺利;但是当我在另一台计算机上编译它时,它会产生很多未定义 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/
是否有任何理由导致下面的代码不起作用? (编译为 C 代码) 代码 #include int main() { int var = 10; if (var == 0) return
所以我正在用 C++ 编程,据我所知,没有与 stdint.h 等效的 C++。这没问题,因为您只需获取 stdint 的拷贝并将其包含在内……但我的问题基本上是这样的, 这两段代码有什么区别: st
由于 C 是一种松散类型的语言并且 stdint.h 只定义了 typedefs(我假设),如何保证 int 的宽度? 我要问的是实现而不是库的使用。 最佳答案 How can types guar
在 Linux 上进行 C++ 编程时应该使用哪些类型?使用 stdint.h 中的类型是个好主意,例如 int16_t 和 uint8_t? 一方面,stdint.h 肯定无法在 Windows 上
我正在处理遗留的嵌入式 C 代码,这些代码使用 typedef 关键字在头文件中定义类型 uint8_t、uint16_t 和 uint32_t . 为了便于讨论,假设文件 typedefs.h 包含
请看我的代码: #include int main(int argc, char *argv[]) { unsigned char s = 0xffU; char ch = 0xff; int va
对于 stdint.h,我必须引用此页面: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html 我完全惊讶地发
问题是在一个平台(windows,mvsc2015)上 uint64_t 被定义为 unsigned long long 而在另一个平台(ubuntu,clang)上它是 unsigned long
我正在处理一个专为 iPhone OS 2.0 设计的项目,我打算在提供新的 OS 3.x 功能的同时保持与此版本的兼容性。 当我将基础 SDK 设置为 iPhone OS 3.1.3 并将目标操作系
这个问题在这里已经有了答案: Is there a Java library for unsigned number type wrappers? [closed] (5 个答案) 关闭 9 年前。
我正在尝试使用 Symbian Belle Sdk 为 Pys60 2.0 编译 PyS60USB,但由于一些看似无关的原因,我收到了关于几乎所有未命名类型的看似随机的错误,如下所示: * C:/No
C99 和 C++11(以及之前的 POSIX)在 stdint header 中引入了 least 和 fast 类型,例如int_fast16_t 或 uint_fast8_t。 我想知道这些类型
我在 C99 standard 中读到stdint.h 是 C 标准库的一部分。 我没看错吗,如果我测试 C99 合规性,使用: defined (__STDC_VERSION__) && (__ST
当我将 Apportable 用于我的 C++ 源代码时,它找不到在 stdint.h 中定义的符号. error: use of undeclared identifier 'UINT8_MAX'
我已经知道 stdint 用于当您需要特定的变量大小以实现平台间的可移植性时。我现在真的没有这样的问题,但除了上面已经显示的事实之外,使用它的利弊是什么? 在 stackoverflow 和其他网站上
我希望 char、short 和 int 类型的宽度为 1、2 和 4 字节。我在源代码中包含了一个 stdint.h header 。这是否保证 int8_t、int16_t 和 int32_t 整
stdint.h 定义具有指定宽度的整数类型。我们什么时候应该使用这些类型,例如 uint32_t 而不是 unsigned int?是因为我们可以在不考虑底层机器的情况下获得想要的类型吗? 最佳答案
如果我希望所有包含 proto.h 的 *.c 文件都使用 int32_t 而不是 int 将其写入名为的头文件是否正确proto.h: #ifndef PROTO_H_INCLUDED #defin
我注意到,在使用 native 标量类型(整数、短整型、字符)或 stdint 提供的标量类型时似乎没有一致性或最佳实践:uint32_t uint16_t uint8_t。 这让我很烦恼,因为驱动程
stdint.h和cstdint有什么区别? 它们都在 MSVC (Visual Studio 2010) 和 gcc-4.5.1 中可用。还都定义了 intX_t/uintX_t 类型(其中 X 是
我是一名优秀的程序员,十分优秀!