在C++中,函数声明后面需要加分号(';')吗?

175

最近我参加了一场中级编程测试,其中有一个问题我做错了:

在函数声明后不需要分号 (';')。

是真的还是假的。

我选择了“假”(如果我错了,请纠正我,因为我感觉自己要疯了),函数声明是你在定义之前写的东西(在代码顶部),所以当调用它之前编译器就知道函数的名字,而函数定义则构成了整个函数。

例如:

声明:

int func();

定义:

int func() {
  return 1;
}

这个答案不应该是错误的吗?


42
“定义”也是一种声明。但我认为你的回答是正确的。 - user2100815
218
这是一个棘手的吹毛求疵的问题,与任何人编程能力无关。 - phonetagger
41
我总是觉得双重否定的问题很令人困惑。在我看来,这样的问题旨在使学生出错。这个问题为什么不能改成以下这种形式:“在函数声明后总是需要分号(';')吗?是或否?”?:/ - Algirdas Preidžius
19
这种混淆只能说明问题的陈述非常糟糕。 - François Andrieux
34
汉隆剃刀指出,测试作者混淆了“声明”和“定义”的概念。 - Sneftel
显示剩余18条评论
12个回答

2

当函数在 main()之前定义 时:

  • 无需分号,因为函数已经被定义。

当函数在 main()之后定义 时:

  • 需要分号,因为您正在为该函数进行原型设计,并告诉编译器该函数存在。

注:Original Answer翻译成“最初的回答”。

2

分号 (;) 用于告诉编译器在此分号 (;) 后开始一个新的语句。

因此,我认为分号 (;) 仅在函数声明时需要。所以根据我的理解,答案应该是真的。

翻译后的内容:

在代码中,分号 (;) 的作用是告诉编译器这个分号 (;) 后面是一个新的语句。因此,在函数声明时需要使用分号 (;),但在其他情况下可能不需要。综上所述,我认为原回答是正确的。


声明不是语句。 - HolyBlackCat
但是在函数声明之后,我们使用编译器执行了一行新的代码。因此,在执行新的一行代码之前,我认为编译器必须知道上一行代码在哪里结束,只有这样编译器才能生成本地代码(即0101)。 - Jatinder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接