【问题标题】:how to explain this expression "int a=({10;});" in C language?如何解释这个表达式“int a=({10;});”用 C 语言?
【发布时间】:2013-10-16 03:27:01
【问题描述】:

在我的 C 语言练习中,我遇到了一个表达式,然后我将其简化如下:

int a=({10;});

这是一个合法的表达式,因为它通过了 gcc 编译器。 请关注这部分:({10;})。有人能解释一下吗?越详细越好。谢谢!

【问题讨论】:

  • 我几乎肯定这是一个 gcc 扩展,而不是一段合法的 C 代码。不过,我很想知道它是什么。
  • 也试试这个int a = [10];
  • 含义已经解释过了(是gcc的扩展),不过写成int a = 10;更清晰便携
  • @GrijeshChauhan:嗯?对于int a = [10];,gcc 给了我error: expected expression before ‘[’ token。你期望它做什么?
  • @GrijeshChauhan:不,这也是语法错误。 (您应该在发布之前尝试一下。)

标签: c gcc gcc-extensions


【解决方案1】:

这是一个语句表达式。它是gcc extension,根据文档6.1 Statements and Declarations in Expressions

复合语句中的最后一件事应该是一个表达式,后跟一个分号;这个子表达式的值作为整个构造的值。

所以对于这段代码:

int a=({10;});

根据这些规则,值将是10,将分配给a

这个扩展是一个many gcc extensions used in the Linux kernel,虽然链接的文章实际上并没有涵盖语句表达式,但这个kernel newbies FAQ entry解释了在Linux内核中使用语句表达式背后的一些原因。

gcc 文档说明使用 -pedantic 选项编译会在您使用 gcc 扩展 时向您发出警告。

【讨论】:

    【解决方案2】:

    它不是标准 C,而是 GCC 的扩展,称为 statement expression。括在括号中的复合语句可能会显示为表达式。

    复合语句中的最后一件事应该是一个表达式,后跟一个分号;此子表达式的值用作整个构造的值。

    回到你的例子:

    int a=({10;});
    

    {10;} 用作复合语句表达式,因此a 的值为10

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2013-04-23
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      相关资源
      最近更新 更多