繁体   English   中英

C 中的初始化列表和序列点

[英]Initializer lists in C and sequence points

C 标准声明在初始化器中完整表达式的末尾有一个序列点,并且

initializer:

        assignment-expression

        { initializer-list }

        { initializer-list , }

initializer-list:

        initializer

        initializer-list , initializer

然而,这意味着这

int a[2] = { i = 1 , ++i };

应该没问题有人可以解释为什么会这样吗?

我不知道你在哪里看到的。 我看到https://port70.net/~nsz/c/c11/n1570.html#6.7.9p23

初始化列表表达式的求值相对于彼此的顺序是不确定的,因此任何副作用发生的顺序是未指定的。

应该没问题有人可以解释为什么

它“很好”,因为在行为中定义未指定的行为 您不知道, i = 1++i中的哪一个将首先执行或最后执行,其中一个将执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM