问题标签 [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 - 在 C 代码中重构类型的工具
我正在寻找一种可以在 C 代码中重构类型(!)的工具。
我有一个复杂且相对较大的代码库,我们决定从内置整数类型切换到具有显式宽度的类型。就像将“ unsigned int ”的每个实例更改为“ uint32_t ”等。
我知道有很多工具可以重构例如名称,但我所知道的没有一个可以完全重构类型。例如,Visual Assist 可能能够将“long”重构为单个标记,但不能重构“unsigned long”。
c++ - 是否有一种可移植的方式来了解 uintptr_t 是否在 stdint.h 中定义?
序言:我想将指针转换为整数类型,例如检查对齐。uintptr_t
似乎是正确的类型,但它只在 C 中得到保证,而不是在 C++(或 C++11)中
对于以下代码:
2个问题:
- 是否有一个神奇且有保证的词可以在我放置的地方使用
I_WONDER_IF_UINTPR_T_IS_DEFINED
? - 我应该使用
unsigned long
并忘记它吗?
生成的程序集(当 uintptr_t 可用时):http: //goo.gl/4feUNK
注 1:我知道在 C++11 中我应该使用alignof
它来代替sizeof
注 2:我知道这个讨论:<cstdint> vs <stdint.h>
c - 什么是 int32_t , uint16_t .... 在 stdint.h
int32_t 和 uint16_t 指的是什么?
它们是什么:宏,数据类型......
我们可以在哪里使用它们?
windows - 如何使用 MSVC 2008 在 Windows 上使用 qtwebkit 构建 Qt5 - leveldb 找不到 stdint.h
在 Windows 7 x64 机器上:
- 我为 Windows 7 和 .NET Framework 3.5 SP1 安装了 Microsoft Windows SDK
- 我从http://www.qt.io/download-open-source/#的“源包和其他版本”部分下载并解压缩了 Qt5.4.0 源代码
- 我根据http://qt-project.org/wiki/Compiling-ICU-with-MSVC
ICU 54.1
从源代码构建并安装它。 - 我根据http://doc.qt.io/qt-5/windows-building.html创建了一个命令提示符快捷方式。
- 我根据http://qt-project.org/wiki/Building_Qt_5_from_Git和http://qt-project.org/wiki/Compiling-ICU-with-MSVC的使用部分在命令提示符中添加了一些东西。
所以我的 qt5vars.cmd 是:
- 我
qtwinextras\src\winextras\winshobjidl_p.h
根据编译 Qt 5.3.2 + VS2008 + SDK7.1 错误 SHARDAPPIDINFOLINK 进行了更新。 - 根据https://groups.google.com/forum/#!topic/theano-users/JReP5_Ligu4和C99 stdint.h 标头和 MS Visual Studio,我
stdint.h
从C:\Program Files\Microsoft Visual Studio 10.0\VC\include
另一台机器上复制,并将其粘贴到C:\Qt\qt540\qtwebkit\Source\WTF\wtf
. 我注释掉了 的声明WCHAR_MIN
,并将修改后的 stdint.h 复制到c:\qt\qt540\qtwebkit\source\javascriptcore\runtime
.
通过该设置,从上面的 qt5vars.cmd 提示符中,我将 Qt 配置为:
配置 -prefix %CD%\qtbase -developer-build -opensource -opengl desktop -nomake 测试 -no-compile-examples -skip qtwebkit-examples -icu -plugin-sql-sqlite -platform win32-msvc2008 -confirm-license
然后跑了nmake
。我收到一堆 leveldb 找不到 stdint.h 的错误:
中有一个 stdint.h C:\Qt\qt540\qtwebkit\Source\ThirdParty\leveldb\port\win
,但是将该文件或我修改后的 stdint.h 复制到leveldb\db
并leveldb\include\leveldb
没有什么区别 - 我在构建 Qt 时遇到了同样的错误。
我需要做什么才能用 Qt 构建 qtwebkit,或者至少解决这个 leveldb sdtint.h 问题?
c - 在头文件中包含 stdint.h 会中断使用 clock_gettime() 进行编译
我的 C 文件使用clock_gettime()
. 为此,它包括<time.h>
并定义_POSIX_C_SOURCE
to (200112L)
,根据手册页:
我编译并链接了以下选项:
, 并PROJ_SETTINGS_INC
设置为包含设置的 h 文件。
到目前为止,没有问题。
现在我修改我的设置文件并使用uint16_t
,因此我将其包含<stdint.h>
在设置 h 文件中。
编译器现在抱怨这clock_gettime()
是一个隐式声明。
如果我将我的设置文件改回使用int
而不是uint16_t
,并将包含删除为<stdint.h>
,则再次编译。
为什么<stdint.h>
在我的设置中包含 h 文件会中断编译clock_gettime()
?
我最好的猜测是stdint
重新定义了POSIX
定义,但这对我来说没有意义,因为该-include
指令的工作方式就像在源代码的第一行中完成了包含一样。
这是一个例子(根据 John Bollinger 的回答,我开始明白出了什么问题,但我想我还是会写这个)。
酒吧.h:
foo.c
构建:
奇怪的是,这给出了一个有用的警告。在我的原始应用程序中,我只得到了隐式声明错误。
c - 根据用户输入声明特定宽度变量的最佳方式
我有一个如下所示的代码。这里的代码是如果word_size = 64
. 以类似的方式,我也需要 32 和 16。我找不到encrypt
为所有尺寸重用相同功能的方法。此外,我还需要根据word_size声明变量,即。使用uint_16
or or uint_32
oruint_64
取决于 word_size。在这种情况下,你能帮我写一个可重用的代码吗?
如果需要,我可以提供更多信息。
c - 如何从 int32_t 中提取字节块并使用 c 将其存储在 int16_t 或 int8_t 中?
如果我有,例如:
我想将两个最重要的字节存储在int8_t
:
或 4 个最重要的字节int16_t
:
我怎样才能做到这一点?
c++ - 为什么 GCC 只定义 __INT8_MAX__ 而不是 __INT8_MIN__?
GCC 的预定义宏包括__INT8_MAX__
但不包括__INT8_MIN__
.
INT8_MIN
stdint.h
用定义(-__INT8_MAX - 1)
。
GCC 是否假设系统是二进制补码?我认为这(INT8_MAX +1)
是一种更好的定义方式,INT8_MIN
因为它可以在 1 的补码系统和 2 的补码系统中工作,最好的是 compiler-provided __INT8_MIN__
。
为什么 gcc 不提供__INT8_MIN__
?
我实际上没有任何不使用二进制补码的系统,所以我使用它没有任何问题,但我只是好奇。
c++ - 哪个 C++ 标准头文件定义了 SIZE_MAX?
我正在研究一个恰好SIZE_MAX
在几个地方使用的现有 C++ 代码库。我做了一些重构,现在SIZE_MAX
没有在其中一个模块中定义。当Travis-CI试图在 Linux 上构建项目时,就会出现这个问题。在我重构之前它工作得很好,但是很难跟踪包含了哪些确切的头文件。
为了在本地复制问题,我安装了一个带有默认 gcc 的 Ubuntu VM,并且能够重现它。以下是相关来源:
命令行很简单:
错误是:
系统信息:
我尝试过包括cstdint
, stdint.h
, limits.h
, inttypes.h
, stdio.h
, stdlib.h
, 可能还有其他一些,但我不知道我需要哪个特定的头文件SIZE_MAX
。
重要的是要注意SIZE_MAX
,在我进行一些更改之前,我正在处理的程序编译得很好,并在各个地方使用过。我所做的更改导致它在使用它的一个 .cpp
源文件中变得未定义(其他的仍然很好)。所以在我的系统上存在一些正确定义的头文件。
c++ - 在 android NDK 上检测 stdint.h 和 C++11
我发现某处可以使用以下行检测 C++11:
我正在使用它来有条件地定义固定宽度类型,例如 int32_t 或 uchar16_t 等...
问题是在使用 android NDK 时,__cplusplus
定义为1
. 是否有更便携的方法来检测 C++11 和 stdint.h 的存在以避免重新定义?
谢谢你。