奇怪的C/C++语法

eno*_*ram 21 c c++ syntax gcc nested

可能重复:
这个C++语法是什么将括号包围的块放在需要表达式的位置?

我刚刚遇到这种奇怪的C/C++语法:

#include <stdio.h>
int main() {
    printf("%s",
        ({
        static char b__[129];
        b__[0] = 55;
        b__[1] = 55;
        b__[2] = 0;
        b__;
        })
    );
}
Run Code Online (Sandbox Code Playgroud)

这使用gcc和g ++编译并运行良好(4.5.2).这是我第一次看到这样的东西,我想知道这种语法究竟意味着什么.我试过谷歌它,但我不知道这个结构被称为什么.

cni*_*tar 27

它们被称为语句表达式,它是GNU扩展.在您的示例中,表达式的结果是b__.

  • 我想补充一点,它们在宏中使用时非常方便,因为它们允许宏(几乎)像返回结果的函数一样. (3认同)

归档时间:

查看次数:

1631 次

最近记录:

13 年,8 月 前