c struct变量赋值中的编译错误

时间:2014-07-12 21:03:51

标签: c struct variable-assignment

struct变量赋值有疑问。

struct udata
{
    char name[50];
    int num;
    char ch;
};

void main()
{
    struct udata a = {"ram", 20, 'a'};
    struct udata b;
    //b = {"ashok", 10, 'c'}; - illegal
    b = a;
}

在上面的代码中,b = {"ashok", 10, 'c'};提供了编译错误,但它接受b = a;。我希望两者都是类似的任务,但我不知道为什么它不接受第一个。有人可以解释我为什么会这样吗?

注意:我正在使用fedora gcc编译器进行编译。

3 个答案:

答案 0 :(得分:4)

初始化程序只能在申报时使用。如果你想在声明后初始化b,那么你可以通过使用复合文字来实现它 - 一个C99特征:

b =  (struct udata){"ashok", 10, 'c'};  

GCC还支持复制文字作为extension

答案 1 :(得分:3)

您尝试做的事情不能直接在标准C中完成。最好的标准和便携式解决方案是暂时使用:

const struct udata tmp = {"ashok", 10, 'c'};
b = tmp;

然而,在实践中,编制者经常(但并非总是如此!)允许以下内容(*请注意以下内容):

b = (struct udata){...};

(* 注意:我相信至少MSVC不支持这种语法,可能还有很多其他语法;但只是把它扔到那里。但是,GCC,支持它)

答案 2 :(得分:2)

这就是C的设计和指定方式。你无能为力。如果您有结构变量,则只能通过声明中的初始化程序或稍后初始化各个成员来初始化它。


将来,在发布有关编译器错误的问题时,请在问题中包含完整且未经编辑的错误日志。