在C语言中,什么时候应该使用UINT32_C()、INT32_C()...等宏?
我在项目中切换到项目中的固定整数类型,主要是因为它们在使用它们时会更清楚地考虑整数大小.通过#include 包括它们还包括一堆其他宏,例如打印宏PRIu32,PRIu64,... 要为固定长度变量分配一个常数值,我可以使用UINT32_C()和INT32_C()等宏.每当分配一个恒定值时,我就开始使用它们. 这导致与此类似的代码: uint64_t i; for (i = UINT64_C(0); i
8 2024-04-07
编程技术问答社区
无法理解表达式 *(uint32_t *)做什么
我无法理解表达式*(uint32_t*)的作用. 我已经将声明分为一个示例,该示例声明了零件,因此我可以尝试解释每个零件的作用. uint32_t* ptr; uint32_t num *(uint32_t*)(ptr + num); //
26 2024-04-07
编程技术问答社区
uint32和uint32_t的区别
可能的重复: 不同整数类型之间的差异 uint32 和 uint32_t 在c/c ++? 中有什么区别 它们是否取决于OS? 在哪种情况下我应该使用一种或另一种? 解决方案 uint32_t是标准的,uint32不是.也就是说,如果您包括或,您将获得uint32_t的定义. uint32是某些本地代码库中的Typedef,但是除非您自己定义它,否则您不应期望它存在.自己定义是一个坏主意. 其他解决方案 uint32_t在标准中定义了 中的 18.4.1标头概要[cstdint.syn] namespace std { //... typedef unsigned integer type uint32_t; // optional //... } uint32不是,它是一些编译器提供的快捷方式(可能是typedef uint32_t uint32),以便于使用.
42 2024-04-07
编程技术问答社区
'uint32_t'并没有命名一个类型
我正在尝试编译2007年编写的C ++软件包,我遇到了此错误: error: ‘uint32_t’ does not name a type 使用G ++ 4.5.2在64位Ubuntu中发生这种情况.它使用G ++ 4.1.2. 是否有#include或我缺少的编译器标志?或者,我应该使用typedef将uint32_t分配给size_t或unsigned int? 解决方案 您需要包括stdint.h #include 其他解决方案 您需要#include ,但这可能并不总是有效的. 问题在于,某些编译器通常会自动导出在各种标题或提供类型的类型之前定义的名称. 现在,我说"可能并不总是有效".这是因为CSTDINT标头是C ++ 11标准的一部分,并且在当前的C ++编译器上并不总是可用(但通常是). stdint.h头是C等效的,是C99的一部分. 为了获得最佳可移植性,我建议您使用Boo
24 2023-02-25
编程技术问答社区
什么是*(uint32_t*)
我很难理解*(uint32_t*). 假设我有: uint32_t* ptr; uint32_t num *(uint32_t*)(ptr + num); //what does this do? does it 解决方案 uint32_t是保证32位的数值类型,值是无符号的,表示值的范围从 0 到 232 - 1. 这个 uint32_t* ptr; 声明了一个 uint32_t* 类型的指针,但该指针未初始化,即也就是说,指针并不特别指向任何地方.试图访问通过该指针的内存将导致未定义的行为和您的程序可能会崩溃. 这个 uint32_t num; 只是一个uint32_t类型的变量. 这个 *(uint32_t*)(ptr + num); ptr + num 返回一个新指针.它被称为指针算术,它是像常规算术一样,只是编译器将类型的大小放入考虑.将 ptr + num 视为基于原始的内存地址ptr 指针加上 num uint32_t 对
1346 2022-08-15
编程技术问答社区