复合文字的赋值如何有用?

问题描述

我正在阅读有关复合文字的信息,我发现它们是l值。因此,我怀疑您可以分配它们,因此我进行了一个实验,并注意到它在编译时没有警告,gcc -Wall -Wextra -pedantic

struct foo {
    int x;
    int y;
};

int main(void) {
    (struct foo){0,0} = (struct foo){1,1};
}

这让我感到困惑,因为我真的看不到任何可能有用的情况。您什么时候要为复合文字赋予 什么?

还是这是常见的未定义行为之一?因为它看起来非常像修改字符串文字。使用上面的相同参数编译时不会发出警告:

struct foo *ptr = &(struct foo){0,0};
*ptr = (struct foo){1,1};

char *str = "Hello";
*str = 'X'; // Undefined behavior

根据C standard 6.4.5.7

,修改字符串是未定义的行为

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)