C中奇怪的初始化

Posted

技术标签:

【中文标题】C中奇怪的初始化【英文标题】:Weird initialization in C 【发布时间】:2022-01-10 07:39:47 【问题描述】:

我有这段代码,但我不知道它是如何工作的

#include <stdio.h>

int main(void)

    int numero = (const int i = 10; i+10;);

    printf("%d\n", numero); // Prints 20

    return 0;

为什么如果我删除第二部分 (i+10;),编译器会出错? 为什么需要括号?

谢谢你^^!

【问题讨论】:

【参考方案1】:

这是一个GCC statement expression。它执行其中的语句,并返回在最后一条语句中计算的值。因此numero 被初始化为20。如果删除第二部分,则没有表达式作为最后一条语句,因此无法从语句表达式中获取值。

大括号对于消除它与普通 C 括号表达式的歧义是必要的。

【讨论】:

以上是关于C中奇怪的初始化的主要内容,如果未能解决你的问题,请参考以下文章

C ++中奇怪的运行时异常

赋值运算符中奇怪的 C++14 和 C++17 差异

类中奇怪的异步/等待行为

UIImageView 中奇怪的对齐行为

zsh 中奇怪的“工作”行为

列表理解中奇怪的 lambda 行为