gpt4 book ai didi

c - C中结构的直接初始化

转载 作者:太空狗 更新时间:2023-10-29 17:09:55 24 4
gpt4 key购买 nike

我有:

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

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


struct date d = { 1, 1, 1990 };

初始化
struct person p1 = { "John Doe", { 1, 1, 1990 }};

有效。

但如果我尝试

struct person p2 = { "Jane Doe", d};

我收到如下错误:

“日期无法转换为 int”。

怎么了? d 是一个结构日期,第二个参数也应该是一个结构日期。所以它应该工作。感谢和问候

最佳答案

struct person p2 = { "Jane Doe", d};

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

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

(C11, 6.7.9p4) "All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals."

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

关于c - C中结构的直接初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190408/

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