c++ - C 与 C++ 函数问题

标签 c++ c function scope return

我正在学习 C,在开始学习 C++ 作为我的第一门编译语言后,我决定“回归基础”并学习 C。

关于每种语言处理函数的方式,我有两个问题。

首先,为什么 C“不关心”函数定义的范围,而 C++ 关心?

例如,

int main()
{
    donothing();
    return 0;
}

void donothing() { }

以上不会在 C++ 编译器中编译,而会在 C 编译器中编译。为什么是这样? C++ 主要不是 C 的扩展,应该主要“向后兼容”吗?

其次,我找到的书 ( Link to pdf ) 似乎没有说明 main 函数的返回类型。我四处查看并找到了其他书籍和网站,这些书籍和网站通常也不指定 main 函数的返回类型。如果我尝试编译一个没有为 main 指定返回类型的程序,它可以在 C 编译器中正常编译(尽管有一些警告),但它不能在 C++ 编译器中编译。再一次,这是为什么?始终将返回类型指定为整数而不是将其遗漏是更好的风格吗?

感谢您的帮助,顺便提一句,如果有人能推荐一本我应该买的更好的书,那就太好了!

最佳答案

Firstly, why does C "not care" about the scope that functions are defined in, whereas C++ does?

实际上,C 确实关心。只是 C89 允许隐式声明函数并从用法中推断其返回类型为 int 及其参数。 C99 不再允许这样做。

因此在您的示例中,就好像您已将原型(prototype)声明为

int dosomething();

隐式返回类型也是如此:缺少的返回类型在 C89 中被推断为 int 而不是 C99。使用 gcc -std=c99 -pedantic-errors 编译您的代码会产生类似于以下内容的结果:

main.c: In function 'main':
main.c:2:5: error: implicit declaration of function 'donothing' [-Wimplicit-function-declaration]
main.c: At top level:
main.c:5:6: error: conflicting types for 'donothing'
main.c:2:5: note: previous implicit declaration of 'donothing' was her

作为记录,这是我使用的代码:

int main() {
    donothing();
    return 0;
}
void donothing() { }

关于c++ - C 与 C++ 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743445/

相关文章:

javascript - 在对象内部的函数内部使用函数

c - 夹板:来自 strcpy() 的新存储?

c - 此 "good taste"和 "bad taste"代码中是否缺少 free()?

java - 求Android Java AES Encryption , NDK C/C++ Decryption and viceversa源码例子

c++ - 使用指针的数组长度

c++ - 将 GetAsyncKeyState() 重置为默认值

javascript - javascript函数的未定义函数错误

c - 使用函数的帕斯卡三角形

c++ - hashmap和tree map的优缺点?

c++ - 如何初始化静态本地 POD 常量?懒还是不懒?