以下是引用如蜗牛在2013-4-13 18:16:57的发言:
追问:
1、一个工程只能有一个main函数,那么那些没有主函数的文件以什么为入口呢?
2、命名空间为什么存在呢?在C中存在吗?C++增添了这个有什么好处呢?
1.工程可能有多个可执行程序,每个可执行程序才只能有一个main()函数作为此程序的入口函数,而单一程序也不仅仅只有一个.cpp源文件的,根据模块化划分,它可以由多个.cpp模块组成,那些其余的.cpp源文件才不能有main()函数,整个程序经编译器用链接器(Link)把所有源文件编译成目标代码后和相关的库代码链接在一起成为可执行程序,这个最后的产品才是可以运行的,程序发布之后,目标机器上不需要存在源文件,这就是编译型语言的运作机制。对大型的系统工程,将会有若干个可执行程序,这些是该工程的整体,相当于一个楼盘由一群楼宇构成一样,施工的时候它们是作为一个项目报建、设计和施工的。
2.命名空间是面向对象语言才有的,C没有这个东西。写程序的时候,经常会出现不同的功能模块有相同的命名标识符,可以这样类比,每所学校都有教研室,那么你作为上层的教育局,如何识别下面数十所学校的教研室呢,当然是在这些教研室的前面加上学校名称了,这里学校名称就是命名空间,在每所学校里面,他们可以简单地称呼教研室,但在外面,就不能这样了。引入了命名空间,其实也要求标识符的唯一性,如果两个命名空间都存在printf()函数,你又在声明中宣布同时引入了这两个命名空间,那么编译器也会要求你在使用printf()函数的时候明确指定是哪个命名空间中的printf(),这样你就得在printf()函数前面加上namespace::printf(),等于把标识符写全。这只是节省书写劳动的一种措施,编译器在编译时,是会把一切还原到最完整形式的,假如它还原不了,就一定会报告出了问题。