C 中“if”表达式内的变量声明
在 C 中,能够在“if”语句的条件下声明变量已成为限制的主题。编译器(包括 Visual Studio 2008)经常遇到括在括号中的变量声明或单个条件中的多个声明的困难。
根据 2003 C 标准第 6.4.3 节,选择语句中声明的变量具有作用域延伸到由条件控制的子语句的末尾。但是,该标准没有明确解决括号或多个声明的使用。
例如,以下代码无法编译:
if((int a = Func1())) { // Fails to compile. }
即使只需要一个声明的情况,这种限制可能会令人沮丧。请考虑以下内容:
bool a = false, b = true; if(bool x = a || b) { }
要在“if”主体范围内将“x”设置为“false”,声明需要括号。但是,条件内不允许使用括号,从而强制在体外声明“x”并将其泄漏到更广泛的范围。
从 C 17 开始,这些限制已得到解决。现在可以使用以下代码:
if (int a = Func1(), b = Func2(); a &&& b) { // Do stuff with a and b. }
使用 ';'代替“,”将声明与条件分开,解决了之前的限制。
以上是C `if` 语句可以在其条件内声明变量吗?的详细内容。更多信息请关注PHP中文网其他相关文章!