0

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

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

我可以根据需要添加任意数量的分号,并且上述内容不会导致任何编译器或运行时错误。这让我来自像 C++ 这样严格的语言感到惊讶。有人可以解释为什么我能够做到这一点吗?但是,我无法在任何其他情况下执行此操作。

int x = 1;;;; // error

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

4

2 回答 2

2

引自 K&R,表达式语句有 product expression-statement: expression;

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

它是一种有效的语言结构,因此您的编译器不会抱怨。

于 2012-10-14T00:29:08.167 回答
1

它们只是空洞的陈述。

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

我敢打赌,您所看到的差异int x = 0;;;;;是在全球范围内,所以 -pedantic 明白了。这就像在函数定义后多了一个分号。进入int x = 0;;;;一个函数,它不会抱怨。

于 2012-10-14T00:22:47.703 回答