露怯了……
Tofloor
poster avatar
xliang9550
deepin
2015-08-13 05:37
Author
本帖最后由 xliang9550 于 2015-8-12 21:58 编辑

给新入校的研究生演示自己编写的《C语言程序设计现代方法》习题解答。
打开第一个源文件:Hello World,结果main()的函数原型写的是
void main(void)
几位新生异口同声说我“在这本《现代方法》之前一定接触过《C程序设计》”。
Reply Favorite View the author
All Replies
rekols
deepin
2015-08-13 05:44
#1
#include
Reply View the author
xliang9550
deepin
2015-08-13 06:11
#2
说句实话,当时看到《现代方法》中竟然使用int main(void),确实感觉非常奇怪。
我心想,与其让main()返回int值并且额外加一句return 0;,还不如直接用void返回类型精简易读易懂。
但是,连续翻了N本外版书,都用的int main(void),我开始有些动摇了。心想,一本《现代方法》的作者有可能执迷不悟,不过那么多外版书的作者全都执迷不悟的概率就相对小得多了。
何况,void main(void)的写法我确实只在国内的教材上看到过。
于是对比了两本书的作者,K. N. King在国际上的名气好像确实比谭浩强大一些。
所以,做到《现代方法》后半本的习题的时候,我也开始改用int main(void),不过确实不习惯。然后又开始逐条修改前面的源程序。
怎知这个Hello World的源程序忘了改了……
Reply View the author
ArthurDeepin
deepin
2015-08-13 06:30
#3
在 C++ prime plus 第六版15页里谈到,使用void并且省略 return语句,并不是当前标准强制的一个选项,因此在有些系统上并不能工作。因此读者应该避免这种格式,而应该使用C++标准格式。然而C++标准也做出了让步,如果函数结尾没有遇到return语句,则认为以return 0;结尾。这个规则只适用于main()。

以上是C++的标准。不是C。

C里面有一个经典的写法:
main()
缺省的意思是认为返回int,对是否接收参数保持沉默。

C++淘汰了这种写法,并且()与(void)等效,并不是保持沉默。
Reply View the author
ArthurDeepin
deepin
2015-08-13 06:39
#4
本帖最后由 ArthurDeepin 于 2015-8-12 22:44 编辑
  1. #include
  2. void main()
  3. {
  4.         using namespace std;
  5.         cout << "hello,world" << endl;
  6. }
Copy the Code

  1. $ g++ -o hello hello.cpp
  2. hello.cpp:2:11: error: ‘::main’ must return ‘int’
  3. void main()
  4.            ^
Copy the Code

C++就是酱紫~~~

(⊙o⊙)…既然有标准这样推荐了,虽然不是C,风格上还是靠近吧
Reply View the author
SnDream
deepin
2015-08-13 06:54
#5
谭浩强现在都不写void main了
目前的C程序设计也都是int main
Reply View the author
xliang9550
deepin
2015-08-14 02:40
#6
C和C++是两种不同的编程语言,尽管C++在一定程度上可以看成C的超集,并且C++的部分特性backport回了C语言中。C++允许的规则未必在C中也允许。
在C99和C11中,要求不能省略main()函数的int返回类型,但允许省略return 0;,它会在main()执行结束时自动添加。但不管怎么说,C标准从未允许过void main()的写法。
Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG