gpt4 book ai didi

c++ - struct S { int align; 之间的区别}; (在 struct 关键字之后命名)和 struct { int align; } S; (结构定义后的名称)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:34 31 4
gpt4 key购买 nike

#include <stdio.h>

struct Header
{
unsigned long long int alignment;
};

int main(void)
{
struct Header header; // note: we can loose the 'struct' in C++
struct Header* pheader = &header;

return 0;
}

上面的程序在 C 和 C++ 中都能完美编译。

但是当我将 Header 结构更改为:

struct {
unsigned long long int alignment;
} Header;

它失败并在 C 中显示以下消息:错误:“Header”的存储大小未知

在 C++ 中:error: aggregate ‘main()::Header header’ 类型不完整,无法定义 struct Header header;

K&R在C编程语言书中的Storage Allocator的实现中使用了类似的结构。我以为这是同一件事,但我了解到事实并非如此。从那以后,我也在其他地方看到过。我当然更熟悉第一个版本。第二个是什么意思,它为什么存在?有什么不同?

最佳答案

struct Header {}; 引入了一个名为 Headerstruct 类型。

typedef struct {} Header; 引入了一个匿名结构类型,以及该匿名类型的别名 Header

struct {} Header; 引入了匿名结构类型和匿名类型的名为 Header 的变量。

当没有名为Header 的类型时(最后一种情况),struct Header header; 引入一个名为Header 的struct 类型 没有主体,然后尝试创建该类型的变量 header

关于c++ - struct S { int align; 之间的区别}; (在 struct 关键字之后命名)和 struct { int align; } S; (结构定义后的名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52980388/

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