首页 >后端开发 >C++ >C 的 if 表达式可以跨标准和编译器一致地处理变量声明吗?

C 的 if 表达式可以跨标准和编译器一致地处理变量声明吗?

Barbara Streisand
Barbara Streisand原创
2024-11-27 13:26:12535浏览

Can C  's `if` Expression Handle Variable Declarations Consistently Across Standards and Compilers?

C 中 if 表达式中的变量声明

在 C 中,if 表达式条件中变量声明的语法通常受到限制。问题是这样的限制是基于标准的还是特定于编译器的。

2003 C 标准 (6.4.3) 允许在 if 条件内声明变量,范围扩展到受控子语句。但是,它没有明确禁止声明周围的括号或条件内的多个声明。

C 的早期版本在括号和多个声明方面的行为不一致。在提供的代码示例中:

  • if(int a = Func1()) 符合标准,在 if 条件中声明 a。
  • if((int a = Func1( ))) 由于括号而无法编译。
  • if((int a = Func1()) && (int b =由于缺少括号,Func2())) 需要在 if 块之外声明 x。

此限制对于条件内只需要一个声明的场景来说很不方便。

C 17 解决方案

C 17 对此引入了解决方案问题:

if (int a = Func1(), b = Func2(); a && b)
{
    // Do stuff with a and b.
}

此语法使用分号 (;) 将声明与条件分隔开。它允许在一个条件内声明多个变量,消除了之前的不便。

以上是C 的 if 表达式可以跨标准和编译器一致地处理变量声明吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn