在C中直接初始化结构

kno*_*dge 7 c struct

我有:

struct date
{
int day;
int month;
int year;
};

struct person {
char name[25];
struct date birthday;
};


struct date d = { 1, 1, 1990 }; 
Run Code Online (Sandbox Code Playgroud)

初始化用

struct person p1 = { "John Doe", { 1, 1, 1990 }};
Run Code Online (Sandbox Code Playgroud)

作品.

但是,如果我尝试

struct person p2 = { "Jane Doe", d};
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

"日期无法转换为int".

怎么了?d是结构日期,第二个参数也应该是结构日期.所以它应该工作.感谢致敬

oua*_*uah 8

struct person p2 = { "Jane Doe", d};
Run Code Online (Sandbox Code Playgroud)

只有当声明在块范围内时,才能以这种方式声明它.在文件范围,您需要常量初始值设定项(d是一个对象,对象的值不是C中的常量表达式).

原因是在没有存储类说明符的文件范围内声明的对象具有静态存储持续时间,C表示:

(C11,6.7.9p4)"具有静态或线程存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字."

在没有存储类说明符的块范围内,该对象具有自动存储持续时间.