Nik*_*kos 5 c c++ struct kernighan-and-ritchie
#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;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序在C和C++中完美编译.
但是当我将Header结构更改为:
struct {
unsigned long long int alignment;
} Header;
Run Code Online (Sandbox Code Playgroud)
它失败并在C中显示以下消息:
error: storage size of ‘Header’ isn’t known
在C++中:
error: aggregate ‘main()::Header header’ has incomplete type and cannot be defined struct Header header;
在K&R的C编程语言书中,存储分配器的实现中使用了类似的结构.我认为这是一回事,但我知道事实并非如此.我也曾在其他地方见过.我当然更熟悉第一个版本.第二个是什么意思,为什么它甚至存在?有什么不同?
struct Header {};介绍一个struct名为的类型Header.
typedef struct {} Header;引入了匿名结构类型,以及Header该匿名类型的别名.
struct {} Header;引入了匿名结构类型和Header匿名类型的变量.
如果没有命名类型Header(最后一种情况),则struct Header header;引入一个struct名为Headerwithout body 的类型,然后尝试创建header该类型的变量.