Variable Declaration within 'if' Expressions in C
In C , the ability to declare variables within the condition of an 'if' statement has been a subject of limitation. Compilers, including Visual Studio 2008, often encounter difficulties with variable declarations enclosed in parentheses or multiple declarations within a single condition.
According to Section 6.4.3 of the 2003 C standard, variables declared in a selection statement have scope that extends to the end of the substatements controlled by the condition. However, the standard does not explicitly address the use of parentheses or multiple declarations.
For example, the following code fails to compile:
if((int a = Func1())) { // Fails to compile. }
Even in cases where only one declaration is required, this limitation can be frustrating. Consider the following:
bool a = false, b = true; if(bool x = a || b) { }
To set 'x' to 'false' within the 'if'-body scope, the declaration requires parentheses. However, parentheses are not allowed within the condition, forcing declaration of 'x' outside the body and leaking it to a wider scope.
As of C 17, the limitations have been addressed. The following code is now possible:
if (int a = Func1(), b = Func2(); a &&& b) { // Do stuff with a and b. }
The use of ';' instead of ',' separates the declaration from the condition, resolving the previous limitations.
The above is the detailed content of Can C `if` Statements Declare Variables Within Their Conditions?. For more information, please follow other related articles on the PHP Chinese website!