我发现在函数返回语句中我能够做到这一点。
int f() {
return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;;
}
我可以根据需要添加任意数量的分号,并且上述内容不会导致任何编译器或运行时错误。这让我来自像 C++ 这样严格的语言感到惊讶。有人可以解释为什么我能够做到这一点吗?但是,我无法在任何其他情况下执行此操作。
int x = 1;;;; // error
那么有人可以告诉我为什么我能够做这样的事情吗?
我发现在函数返回语句中我能够做到这一点。
int f() {
return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;;
}
我可以根据需要添加任意数量的分号,并且上述内容不会导致任何编译器或运行时错误。这让我来自像 C++ 这样严格的语言感到惊讶。有人可以解释为什么我能够做到这一点吗?但是,我无法在任何其他情况下执行此操作。
int x = 1;;;; // error
那么有人可以告诉我为什么我能够做这样的事情吗?
引自 K&R,表达式语句有 product expression-statement: expression;
。
如果缺少表达式,则构造称为空语句;它通常用于为迭代语句提供空主体以放置标签。
它是一种有效的语言结构,因此您的编译器不会抱怨。
它们只是空洞的陈述。
return 1;
; //do nothing
; //do nothing
//etc
我敢打赌,您所看到的差异int x = 0;;;;;
是在全球范围内,所以 -pedantic 明白了。这就像在函数定义后多了一个分号。进入int x = 0;;;;
一个函数,它不会抱怨。