gpt4 book ai didi

c - "int i = x++, j = x++;"合法吗?

转载 作者:太空狗 更新时间:2023-10-29 15:01:25 25 4
gpt4 key购买 nike

我觉得标题很清楚。我对此并不完全确定,而且我无法通过 Google 找到一个好的答案(唉,我还没有致力于标准的艺术),所以我问:

int i = x++, j = x++;

这是定义了吗? 我很确定 i = x++, j = x++; 作为一个正常的语句将是未定义的行为 是逗号运算符,这是一个序列点并且是合法的,但是没有任何来源非常清楚初始化程序是在分号处结束还是在下一个变量开始声明时结束,并且由于这不是使用的逗号运算符,所以我找不到明确的答案。所以要么 a) 逗号结束初始化程序,是一个序列点,并且有效,要么 b) 它无效。是哪个?

为了排除,我知道我应该简化头痛并将其写成:

int i = x++;
int j = x++;

并保证它已被定义。出于好奇,我想问更多。

最佳答案

初始化程序的末尾是一个序列点,因此标题中的示例是合法的。

逗号运算符也是一个序列点,因此您的“正常语句”也是合法且定义明确。

The wikipedia article has a list of the C and C++ sequence points.

为了跟进下面的评论,这里演示了逗号运算符的强大功能,它保存在 FreeBSD 的 stdio.h 中(在 ifndef __GNUC__ 下):

/*
* This has been tuned to generate reasonable code on the vax using pcc.
*/
#define __sputc(c, p) \
(--(p)->_w < 0 ? \
(p)->_w >= (p)->_lbfsize ? \
(*(p)->_p = (c)), *(p)->_p != '\n' ? \
(int)*(p)->_p++ : \
__swbuf('\n', p) : \
__swbuf((int)(c), p) : \
(*(p)->_p = (c), (int)*(p)->_p++))
#endif

关于c - "int i = x++, j = x++;"合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com