为什么我能在函数的return语句后输入任意大量的分号?

时间:2012-10-14 00:21:57

标签: c++

我发现在函数返回语句中我能够做到这一点。

int f() {
    return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;;
}

我可以添加任意数量的分号,但上述内容不会导致任何编译器或运行时错误。这让我感到惊讶,因为它来自像C ++这样严格的语言。谁能解释为什么我能做到这一点?但是,我无法在任何其他环境中执行此操作。

int x = 1;;;; // error

有人可以告诉我为什么我能做这样的事情吗?

2 个答案:

答案 0 :(得分:2)

引自K& R,表达式声明包含产品expression-statement: expression;

  

如果表达式丢失,则构造称为空语句;       它通常用于向迭代语句提供空体以放置       标签。

这是一个有效的语言构造,所以没有来自编译器的抱怨。

答案 1 :(得分:1)

他们只是空洞的陈述。

return 1;
; //do nothing
; //do nothing
//etc

我敢打赌你看到的差异是int x = 0;;;;;在全球范围内,所以-pedantic得到它。这就像在函数定义之后有一个额外的分号。将int x = 0;;;;移到一个函数中,它不会抱怨。