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

C++ 为什么我能够在函数的return语句之后输入任意大的分号?,c++,C++,我发现,在函数返回语句中,我能够做到这一点 int f() { return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;; } 我可以添加任意多的分号,并且上面的操作不会导致任何编译器或运行时错误。这让我感到惊讶,来自一个严格的语言,如C++。有人能解释我为什么能这样做吗?然而,我无法在任何其他情况下做到这一点 int x = 1;;;; // error 有人能告诉我为什么我能做这样的事情吗?它们只是空洞的陈述 return 1; ; //do nothi

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

int f() {
    return 1;;;;;;;;;;;;;;;;;;;;;;;; // ...;;;
}
我可以添加任意多的分号,并且上面的操作不会导致任何编译器或运行时错误。这让我感到惊讶,来自一个严格的语言,如C++。有人能解释我为什么能这样做吗?然而,我无法在任何其他情况下做到这一点

int x = 1;;;; // error

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

它们只是空洞的陈述

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

我敢打赌你看到的区别是
intx=0
在全局范围内,所以-pedantic得到它。这就像在函数定义后有一个额外的分号。移动
intx=0编码到函数中,它不会抱怨。

它们只是空语句

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

我敢打赌你看到的区别是
intx=0
在全局范围内,所以-pedantic得到它。这就像在函数定义后有一个额外的分号。移动
intx=0编码到函数中,它不会抱怨。

引用自K&R,expression语句有product
expression语句:expression

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


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

引用K&R,expression语句有product
expression语句:expression

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


它是一个有效的语言构造,因此编译器不会有任何抱怨。

从该
int x=0;;;中得到什么错误行?这是完全正确的。你从中得到了什么错误行?它完全有效。如果有人感兴趣,C++11在§6.3中有它。如果有人感兴趣,C++11在§6.3中有它。