标题有点模糊,因为我真的不知道如何定义这个问题.
它与以下代码有关:
for (match = root,
m_matchBase = match->requestedBase,
m_matchLength = match->length;
match != NULL;
match = match->next,
m_matchBase = match->requestedBase,
m_matchLength = match->length)
{
if (m_matchBase <= m_base && m_matchBase + m_matchLength > m_base)
break;
// other stuff...
}
Run Code Online (Sandbox Code Playgroud)
for循环中的语句是否保证按顺序运行?
例如,m_matchBase = match->requestedBase保证运行之后match = match->next?
该表达式将左起进行评估,以权会有一个序列点的每个评估之后.在C语言中,没有C99标准部分迭代语句草案声明的for语句的语法是:6.8.5
for(表达式opt ;表达式opt ;表达式opt)语句
因此,,每组表达式中的逗号运算符将只是一个分隔符,这意味着将从左到右计算赋值.这在6.5.17 Comma运算符部分中有所说明:
逗号运算符的左操作数被计算为void表达式; 评估后有一个序列点.然后评估右操作数; 结果有它的类型和价值
这是否是可维护代码是另一个问题,重要的是要注意,当match>next返回时,NULL您将在后续子表达式中调用未定义的行为.这可能是某种方式来证明这是一个糟糕的风格选择,因为它很容易错过,很难检查当前的形式.
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |