关于如何理解printf("%d \n",({int n; scanf("%d",&n); n*n;})); 在C中工作

Qui*_*tic 10 c printf block

我通过quora答案看到了这个程序

 #include<stdio.h>
 int main() {
    printf("%d\n", ( { int n; scanf("%d", &n); n*n; } ));
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我想知道这是如何工作的,如果这符合标准?

R..*_*R.. 7

此代码使用名为statement-expressions的"GNU C"功能,其中括号括起的复合语句可用作表达式,其类型和值与复合语句中最后一个语句的结果相匹配.这不是语法上有效的C,而是一个GCC特性(也被一些其他编译器采用),这可能是因为它被认为对编写不会多次评估其参数的宏很重要.

如果你在必须阅读的代码中遇到它,你应该知道它是什么以及它做了什么,但我会避免自己使用它.这是令人困惑,不必要和非标准的.使用静态内联函数几乎总能实现相同的功能.