我听说,int
等数据类型的大小可能因平台而异。
我的第一个问题是:有人能举个例子,当程序假设一个int
是4字节,但在不同的平台上是2字节时,出了什么问题?
我的另一个问题与此有关。我知道人们用一些typedef
来解决这个问题,比如你有u8
,u16
,u32
-这些变量保证是8位、16位、32位的,不管平台是什么——我的问题是,这通常是如何实现的?(我不是指stdint
library中的类型-我很好奇,怎么能强制某些类型总是说32位而不考虑平台??)
对于第一个问题:整数溢出。
对于第二个问题:例如,对于typedef
一个无符号32位整数,在一个平台上,int
是4个字节,使用:
typedef unsigned int u32;
在int
为2字节而long
为4字节的平台上:
typedef unsigned long u32;
这样,您只需要修改一个头文件,就可以使类型跨平台。
如果存在某些特定于平台的宏,则无需手动修改即可实现:
#if defined(PLAT1)
typedef unsigned int u32;
#elif defined(PLAT2)
typedef unsigned long u32;
#endif
如果支持C99stdint. h
,则首选它。
在C标准的早期迭代中,您通常创建自己的typedef语句,以确保您获得(例如)16位类型,基于传递给编译器的字符串,例如:
gcc -DINT16_IS_LONG ...
如今(C99及以上版本),有一些特定类型,如uint16\u t
,正好是16位宽的无符号整数。
如果您包含stdint. h
,您将获得精确的位宽类型、至少那个宽度类型、给定最小宽度的最快类型等,如C99 7.18整数类型中所述
inttypes也非常有用。h
为这些新类型的格式转换添加了一些其他简洁的功能(printf
和scanf
格式字符串)。
我知道人们用一些typedef来解决这个问题,比如你有像u8、u16、u32这样的变量——不管平台如何,这些变量都保证是8位、16位、32位
有些平台没有特定大小的类型(例如TI的28xxx,其中char的大小为16位)。在这种情况下,不可能有8位类型(除非你真的想要它,但这可能会导致性能下降)。
这通常是如何实现的?
通常使用typedef。c99(和C11)在标题中有这些typedef。所以,只要使用它们。
有人能举个例子,当程序假设int是4字节,但在不同的平台上是2字节时,会出现什么问题?
最好的例子是不同类型大小的系统之间的通信。将int数组从一个平台发送到另一个平台,其中两个平台上的sizeof(int)是不同的,必须非常小心。
此外,将int数组保存在32位平台上的二进制文件中,并在64位平台上重新解释它。
我需要生成一个固定长度的文本行: 我现在有的是: 这非常有用,因为生成了一个55个字符的固定长度的字符串。 例如,当可选值为空字符串时,就会出现问题,例如: 在string.format中有空字符串不会给出固定的长度,我仍然需要有30个字符的长度。 任何线索都非常感谢!! 谢谢
C 11首先引入了对通过用户定义的文本在C中定义新文本的支持。C 11或更高版本是否也为
为什么浮点数据类型的精度不与其大小成正比增长?例如: 正如您所看到的,的精度大约是精度的两倍,这是有意义的,因为的大小是。 但这与双精度和长双精度的情况不同,长双精度的大小是128位,是64位双精度的两倍,但其精度只多出三位!! 我不知道浮点数是如何实现的,但从理性的角度来看,仅为三位精度使用64位内存是否有意义?! 我四处搜索,但没有找到一个简单明了的答案。如果有人能解释为什么长双精度只比双精度
本文向大家介绍C/C++中获取数组长度的方法示例,包括了C/C++中获取数组长度的方法示例的使用技巧和注意事项,需要的朋友参考一下 学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / sizeof(array[0]),
主要内容:值类型,引用类型,指针类型C# 语言中内置了一些基本的数据类型,数据类型用来指定程序中变量可以存储的数据的类型,C# 中的数据类型可以大致分为三类: 值类型(Value types); 引用类型(References types); 指针类型(Pointer types)。 值类型 C# 中的值类型是从 System.ValueType 类中派生出来的,对于值类型的变量我们可以直接为其分配一个具体的值。当声明一个值类型的变
在用任何语言编写程序时,您需要使用各种变量来存储各种信息。 变量只是用于存储值的保留内存位置。 这意味着当您创建变量时,您在内存中保留了一些空间。 您可能希望存储各种数据类型的信息,如字符,宽字符,整数,浮点,双浮点,布尔等。根据变量的数据类型,操作系统分配内存并决定可以存储的内容。保留的记忆。 原始内置类型 C ++为程序员提供了丰富的内置和用户定义的数据类型。 下表列出了七种基本的C ++数据