【发布时间】:2021-10-29 03:44:04
【问题描述】:
它允许这样的结构:
if (0);
if (0); else;
为什么允许这样的结构?
语法的简化会是原因吗?
【问题讨论】:
-
if(condition_that_is_far_less_readable_when_negated) ; else { logic }
标签: c if-statement expression language-lawyer grammar
它允许这样的结构:
if (0);
if (0); else;
为什么允许这样的结构?
语法的简化会是原因吗?
【问题讨论】:
if(condition_that_is_far_less_readable_when_negated) ; else { logic }
标签: c if-statement expression language-lawyer grammar
空语句的一些示例用例是:
所有工作都在封闭语句中完成:
// Count length of a string.
for (length = 0; buffer[length] != 0; ++length)
;
该案例是您希望在视觉上清晰的组织的一部分:
if (parameter < .3)
CorrectVeryLow();
else if (parameter < .9)
CorrectLow();
else if (parameter < 1.1)
;
else if (parameter < 1.7)
CorrectHigh();
else
CorrectVeryHigh();
这种情况源于预处理器选择,有时有工作要做,有时没有:
#if FeatureTest
#define InitializeSpecialFeature SetupSpecialFeature()
#else
#define InitializeSpecialFeature
#endif
…
if (TimeToReset)
InitializeSpecialFeature;
【讨论】:
分号;可以单独用作空语句。
这意味着
if (0);
等价于
if (0)
{
// Empty
}
和
if (0); else;
等价于
if (0)
{
// Empty
}
else
{
// Also empty
}
【讨论】:
这里没有什么不寻常或异常的情况,特别是没有“语法简化”。这是完全一致的。这是什么构成“语句”的问题。语法是:
if( <expression> ) <statement> [else <statement>]
<statement> 有多种形式:
statement:
labeled-statement
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
但特别是expression-statement 是:
expression-statement:
expression(optional) ;
所以; 本身就是一个有效的表达式语句。
出于同样的原因,以下是一个有效且格式良好的 C 程序:
int main()
{
;;;;;;;;;;;;;
return 0 ;
}
【讨论】:
if (0); else { /* logic */ } 很有用。 if (0); else; 有什么用处?
validity != usefulness。 C 有一个简单的语法,可以让你做一些愚蠢的事情,但让编译器更容易实现。就像在自然口语中一样,语法上正确的构造仍然可以是语义无意义的。在某些情况下,该语句可能是在条件编译下解析为某事或什么都不做的宏。在这种情况下,null 语句对于在不同构建下保持句法有效性很有用。