Tag: 未指明行为

是(x ++,y)+(y ++,x)未定义或未指定,如果未指定,它可以计算什么?

逗号序列运算符在表达式中引入序列点 。 我想知道这是否意味着下面的程序避免了未定义的行为。 int x, y; int main() { return (x++, y) + (y++, x); } 如果它确实避免了未定义的行为,它仍然可能未指定,即返回几个可能值中的一个。 我认为在C99中,它只能计算1 ,但实际上,各种版本的GCC将这个程序编译成一个返回2的可执行文件。 Clang生成一个返回1的可执行文件,显然与我的直觉一致。 最后,这是C11改变了吗?