为什么C / C ++解析器在单独使用分号时不报告分号错误?例如:
int a;
;
int b;
它是语言语法规则的结果还是解析算法的结果?标准对这种情况有何看法?是;
还是例如应该允许int;
?
答案 0 :(得分:1)
分号终止声明。
如果你的陈述没有做任何事情,那就是你作为程序员的特权。
完全有效使用空状态的示例:
for (int x = 0;; x++) {
if (something(x)) {
return 5;
}
if (bah(x)) {
continue;
}
if (otherthing(x)) {
return 3;
}
}
for
循环中的中间语句为空。但它仍然是必要的,因为for
循环有三个不同的语句,第一个和第三个被填充。
我认为没有一个很好的理由说明单独的分号应该是无效的;它没有害处。它是所有相关的C / C ++标准所允许的,这不是一个比不被允许的更糟糕的位置。
答案 1 :(得分:1)
考虑K& R的经典字符串复制功能:
void strcpy(char *src, char *dst)
{
while (*src++ = *dst++);
}
正如您所看到的那样,空语句不仅仅是合法的,它还是短C语法的基础之一。
答案 2 :(得分:0)
标准中指定了§6/ 1 和§6.2/ 1 (修订版N3376):
语句:
...
attribute-specifier-seq_opt表达式语句
...
和
表达式语句:
expression_opt;
所以语句可以是一个带有冒号的表达式语句,也可以是一个表达式和一个属性说明符序列。