5.7 C和C++(www.cppentry.com)的关系
面试例题1:在C++(www.cppentry.com)程序中调用被C编译器编译后的函数,为什么要加extern "C"?
答案:C++(www.cppentry.com)语言支持函数重载,C语言不支持函数重载。函数被C++(www.cppentry.com)编译后在库中的名字与C语言的不同。假设某个函数的原型为void foo(int x, int y)。该函数被C编译器编译后在库中的名字为_foo,而C++(www.cppentry.com)编译器则会产生像_foo_int_int之类的名字。
C++(www.cppentry.com)提供了C连接交换指定符号extern "C"解决名字匹配问题。
面试例题2:头文件中的ifndef/define/endif是干什么用的?
答案:防止该头文件被重复引用。
面试例题3:评价一下C与C++(www.cppentry.com)的各自特点。如果一个程序既需要大量运算,又要有一个好的用户界面,还需要与其他软件大量交流,应该怎样选择合适的语言?
答案:C是一种结构化语言,重点在于算法和数据结构。C程序的设计首先考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。而对于C++(www.cppentry.com),首先考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
对于大规模数值运算,C/C++(www.cppentry.com)和Java/.NET之间没有明显的性能差异。不过,如果运算设计向量计算、矩阵运算,可以使用FORTRAN或者MATLAB编写计算组件(如COM)。
大规模用户界面相关的软件可以考虑使用.NET进行开发(Windows环境下),而且.NET同COM之间的互操作十分容易,同时.NET对数据库访问的支持也相当好。