C声明结构并定义{}中包含的值是否有效?
C声明结构并定义{}中包含的值是否有效C声明结构并定义{}中包含的值是否有效?,c,macos,C,Macos,C声明结构并定义{}中包含的值是否有效 struct name new_name[] { {"value1"}, {"value2"}, {"value3"}, } 其中: struct name { union { char *value1; } n_u; char *value2; } 您发布的内容无效,因为它在初始值设定项之前缺少等号(以及尾随分号)。否则,它是合法的,但有点难以阅读,因为它没有初始化每个字段,也没有使用
struct name new_name[] {
{"value1"},
{"value2"},
{"value3"},
}
其中:
struct name {
union {
char *value1;
} n_u;
char *value2;
}
您发布的内容无效,因为它在初始值设定项之前缺少等号(以及尾随分号)。否则,它是合法的,但有点难以阅读,因为它没有初始化每个字段,也没有使用全套大括号。在完全大括号的初始值设定项中,每个数组、结构或联合的值列表周围都有一对大括号。在本例中,您有一个包含联合的结构数组,因此应该有3个大括号级别以实现最佳可读性。与所有内容相同的是:
struct name new_name[] = {
{{"value1"}, NULL},
{{"value2"}, NULL},
{{"value3"}, NULL},
};
把代码贴在你的问题里。不要让依赖外部链接的问题变得有意义。更好的是,让你的问题更一般化。绝对没有理由链接到该文件。发布相关语法并询问“这是有效语法吗?”我试图发布代码,但无法获得正确的语法以使其作为问题被接受。将代码缩进4个空格,或者选择它并单击
{}
按钮。目前,您甚至没有提供行号,只提供了一个600行文件的链接。+1用于完整性/最佳实践解释。只是为了确认这会编译包含char*的right-struct,然后初始化为字符串文字?此外,除非您需要位字段或尝试执行一些有趣的操作,例如强制您的成员在单词边界处对齐,否则声明一个由1个成员组成的联合并没有任何意义。。在这种情况下,这并不重要,因为您的联合有一个char*
成员,所以它是4或8个字节。@djechlin是的,允许使用字符串文本初始化char*。字符串将被放置在一个单独的内存区域中,该区域可能不可写,因此如果可以,最好对类型使用const char*。