gpt4 book ai didi

c++ - fRead方法的差异

转载 作者:行者123 更新时间:2023-12-02 10:01:06 25 4
gpt4 key购买 nike

我正在查看一个旧的cpp程序,该程序从二进制文件读取数据。该代码是在Mac OS和Mac OS上编写的。作者(我无法联系)使用fread()的两种变体。一个参数的第二个参数指定为sizeof(int),另一个参数指定为sizeof(unsigned)。假设sizeof(int)== sizeof(unsinged),使用这两种方法有什么区别吗?

fread(&intArr[0], sizeof (int), 1, datafile);
fread(&intArr[0], sizeof (unsigned), 1, datafile);

http://www.cplusplus.com/reference/cstdio/fread/

指定第二个参数是要读取的每个元素的字节大小,因此我认为它们的使用年龄不应有任何差异(除非sizeof()当然不同)。这两种变体在整个文件中混合在一起(看似随机),我无法确定原始作者为什么会使用其中一个。我只是想确保我不会错过一些会影响其实现的微小细节。

最佳答案

Assuming that sizeof(int) == sizeof(unsigned) is there any difference in using these two methods?



否。 sizeof运算符将在编译时解析为 size_t类型的值(本身通常为 unsigned longunsigned long long),该值是这些类型中的字节数(通常为4或8)。

实际上, this C++ Draft Standard声明 intunsigned int 的大小相同:

6.7.1 Fundamental Types
...
3 For each of the standard signed integer types, there exists a corresponding (but different) standard unsigned integer type: “unsigned char”, “unsigned short int”, “unsigned int”, “unsigned long int”, and “unsigned long long int”, each of which occupies the same amount of storage and has the same alignment requirements (6.6.5) as the corresponding signed integer type ...



此外,单独使用 unsigned等效于 unsigned int。从 cppreference(我在标准草案中找不到它,但是该站点通常是可靠的):

Integer types

int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used.



(然后 unsigned被列为那些“修饰符”之一。)

关于c++ - fRead方法的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62473492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com