C声明结构并定义{}中包含的值是否有效?

C声明结构并定义{}中包含的值是否有效?,c,macos,C,Macos,C声明结构并定义{}中包含的值是否有效 struct name new_name[] { {"value1"}, {"value2"}, {"value3"}, } 其中: struct name { union { char *value1; } n_u; char *value2; } 您发布的内容无效,因为它在初始值设定项之前缺少等号(以及尾随分号)。否则,它是合法的,但有点难以阅读,因为它没有初始化每个字段,也没有使用

C声明结构并定义{}中包含的值是否有效

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*。