我发现在函数返回语句中我能够做到这一点。
int f() {
return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;;
}
我可以添加任意数量的分号,但上述内容不会导致任何编译器或运行时错误。这让我感到惊讶,因为它来自像C ++这样严格的语言。谁能解释为什么我能做到这一点?但是,我无法在任何其他环境中执行此操作。
int x = 1;;;; // error
有人可以告诉我为什么我能做这样的事情吗?
答案 0 :(得分:2)
引自K& R,表达式声明包含产品expression-statement: expression;
。
如果表达式丢失,则构造称为空语句; 它通常用于向迭代语句提供空体以放置 标签。
这是一个有效的语言构造,所以没有来自编译器的抱怨。
答案 1 :(得分:1)
他们只是空洞的陈述。
return 1;
; //do nothing
; //do nothing
//etc
我敢打赌你看到的差异是int x = 0;;;;;
在全球范围内,所以-pedantic得到它。这就像在函数定义之后有一个额外的分号。将int x = 0;;;;
移到一个函数中,它不会抱怨。