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