代码之家  ›  专栏  ›  技术社区  ›  Chris Lutz

“int i=x++,j=x++;”合法吗?

  •  5
  • Chris Lutz  · 技术社区  · 14 年前

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

    这是定义的吗? 我很确定 i = x++, j = x++; 作为一个正常的陈述将是未定义的行为

    为了避免头痛,我知道我应该把头痛简化为:

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

    并保证它是明确的。我问得更多是出于好奇。

    2 回复  |  直到 14 年前
        1
  •  11
  •   Ben Jackson    14 年前

    初始值设定项的结尾是 所以标题中的例子是合法的。

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

    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
    
        2
  •  -5
  •   Angel O'Sphere    14 年前

    这是个棘手的问题。

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

    我说过:它是未定义的。(各种C和C++标准保持不受限制)

    但在一个初始值设定项中,我不确定;D of c,我已经得出结论,它也没有定义,但是谁知道。。。

    安杰洛