我正在学习C,在开始学习C++作为我的第一门编译语言后,我决定“回到基础”,学习C。
关于每种语言处理函数的方式,我有两个问题。
首先,为什么C“不在乎”定义函数的作用域,而C++“关心”呢?
例如,
int main()
{
donothing();
return 0;
}
void donothing() { }上面的代码不能在C++编译器中编译,而可以在C编译器中编译。为什么会这样呢?C++在很大程度上不是仅仅是C语言的一个扩展,应该是“向后兼容”的吗?
其次,我找到的书(Link to pdf)似乎没有为main函数声明返回类型。我四处查看,发现了其他书籍和网站,它们通常也没有指定main函数的返回类型。如果我试图编译一个没有为main指定返回类型的程序,它在C编译器中编译得很好(尽管有一些警告),但它不能在C++编译器中编译。再问一次,为什么会这样?总是将返回类型指定为整数而不是省略它是更好的风格吗?
谢谢你的帮助,顺便说一句,如果有人能推荐一本我应该买的更好的书,那就太好了!
发布于 2012-10-05 17:36:14
首先,为什么C“不在乎”定义函数的作用域,而C++“关心”呢?
实际上,C确实关心。只是C89允许隐式声明函数,并将其返回类型推断为int,并从使用中推断其参数。C99不再允许这样做。
因此,在您的示例中,就好像您已将原型声明为
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() { }https://stackoverflow.com/questions/12743445
复制相似问题