问题标签 [stdint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - stdint.h 和 C99
我阅读了作为 C 标准库一部分的C99 标准。stdint.h
如果我测试 C99 合规性,我是否正确阅读,使用:
这意味着stdint.h
应该可用?
恰当的例子:我是否可以考虑一个假装C99
合规但不提供stdint.h
与自己的合规声明不一致的环境,因此存在错误?
编辑:对于好奇的人,有问题的系统是带有 HP C 编译器的 OpenVMS(不是 gcc,它在 openVMS 上确实提供stdint.h
)。因此,根据目前收到的答案和评论,我不得不认为这个实现(伪装成 C99)是有问题的。更多详情:https ://groups.google.com/forum/#!topic/comp.os.vms/Bnh3tIOc7bo%5B101-125%5D
c - 左移 uint64_t 将最重要的 dword 清零
标题总结了它:左移 uint64_t 不会输出预期值,我想知道为什么。我得到的是预期的结果,它的 4 个最重要的字节被清零。我在 Debian Jessie 64 位上使用 x86_64 CPU (Intel i7 3770k)。这是一个重现相同行为的测试程序。
输出
00defec8ed000000 // expected
00000000ed000000 // obtained
c - 标准整数如何从编译时翻译?
在 C 语言中,使用相同的源代码来定位不同的处理器架构是很常见的(或者至少是可能的)。处理器架构以不同方式定义整数大小也很常见。为了增加代码可移植性并避免整数大小限制,建议使用 C 标准整数标头。但是,我对这实际上是如何实现的感到困惑。
如果我正在编写一个为 x86 编写的小 C 程序,然后决定将其移植到 8 位微控制器上,那么微控制器编译器如何知道如何将 'uint32_t' 转换为其本机整数类型?
编写 C 编译器时是否有一些映射要求?例如,如果您的编译器要与 C99 兼容,您是否需要一个映射功能,将所有 uint32_t 替换为本机类型?
谢谢!
c - 为什么类型 int 可以与 sscanf 一起使用,而 int16_t 却不行?
我正在尝试将用户输入流中的值分配给变量 M 和 N。如果我指定 int 类型的 M 和 N,我可以让我的代码工作。但是,当我使用 stdint.h 将它们指定为 int16_t 时,它将读取第一个值,但不会读取最后一个值。为什么是这样?
这里的代码工作得很好......
在这里它不起作用。
c++ - 回到2013年的一个项目,我有很多“类型u_int32_t无法解析”
我在 2013 年使用 Gentoo Linux 下的 g++ v. 4.7.3 和使用 c++11 的 Eclipse Indigo 编译了我的项目。在这个项目中,我需要完美定义整数大小。所以,我使用了 u_int32_t、u_int8_t 类型。
今天,我有 Debian Jessie 下的 g++ v. 4.9.2,仍然使用 Eclipse Indigo。清理项目后,重建导致“类型 u_int32_t 无法解析”。
我的编译器选项:
我的第一次尝试是在正确的位置添加#include <cstdint>
或#include <stdint.h>
(不推荐使用),但我得到了同样的错误。看来我必须到处u_int32_t
替换。uint32_t
我已经搜索过:type "could not be resolved" "u_int32_t" "uint32_t"
但什么也没找到。
另一种选择可能是使用与 2013 年相同版本的 g++ 和 libs 设置 Docker,但出于多种原因,我想迁移到最近的编译器和 libs。
我的结论是到处添加#include <cstdint>
和替换。但我想确认一下正确的方法是什么?u_int32_t
uint32_t
c - 您如何确定您的机器是否支持 C 语言中的标准整数数据类型?
我对 C 中的 stdint.h 的概念有点熟悉。通过明确说明整数的大小,头文件将用该机器上的适当整数替换 #define 整数。例如,如果我的机器有 16 位无符号整数,uint32_t
则将替换为long unsigned int
.
但是,假设您的机器最多只支持 32 位整数。如果你使用 会发生什么int64_t
?如果本机不支持此整数大小,那么由于没有可以修复它的替换,这将如何解决?
编译器会抛出错误,说它无法解决吗?还是会尝试使用两个 32 位分配来保存 64 位数据类型?
c++ - 为什么固定宽度类型委托回原语?
在Visual Studio 14
标stdint.h
头中有固定宽度整数类型的定义,但如果您真正查看那里的定义,它们只是委托回原语。定义如下:
stdint.h
那么,如果它所做的只是回退到原语,是否有任何理由使用它?我也知道 Visual Studio 不只是在编译时替换这些定义,因为如果您尝试将 an 打印int8_t
到控制台,您将得到一个 Unicode 字符而不是数字,因为它实际上只是一个signed char
.
编辑
因为人们指出,他们在逻辑上没有其他东西可以定义,我认为我的问题需要重述。
为什么在 C++ 规范中声明它将具有 8、16、32 和 64 位固定长度的整数的标头将这些整数定义为根据定义可以是编译器想要的任何大小的类型(放入其他人在另一个问题中所说的方式The compiler can decide that an int will a 71 bit number stored in a 128 bit memory space where the additional 57 bits are used to store the programmers girlfriends birthday.
)?
c - 为什么数组的最大大小“太大”?
我与这个答案的印象相同,size_t
标准总是保证它足够大以容纳给定系统的最大可能类型。
但是,此代码无法在 gcc/Mingw 上编译:
错误:数组“array_t”的大小太大
我在这里的标准中有什么误解吗?对于给定的实现是否size_t
允许太大?或者这是Mingw中的另一个错误?
编辑:进一步的研究表明
这恰好与
所以我现在倾向于认为这是 Mingw 中的一个错误,因为基于有符号整数类型设置最大允许大小没有任何意义。