background image

C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的名字与 C

语言的不同。

C++提供了 C 连接交换指定符号 extern "C"解决名字匹配问题。

5.头文件中的 ifndef/define/endif 是干什么用的?

答案:防止该头文件被重复引用。

6.#include <filename.h>和#include "filename.h"有什么区别?

答案:

对于

#include <filename.h>,编译器从标准库路径开始搜索 filename.h;

对于

#include "filename.h",编译器从用户的工作路径开始搜索 filename.h。

7.用预处理指令#define 声明一个常数,用以表明 1 年中有多少秒

(忽略闰年问题)。
解析:

通过这道题面试官想考几件事情:
1)#define 语法的基本知识(例如,不能以分号结束,括号的使用,等等)。
2)意识到这个表达式将使一个 16 位机的整型数溢出,因此要用到长整型符号 L,告诉

编译器这个常数是长整型数。

答案:

#define SECONDS_PER_YEAR (60*60*24*365)UL

8.写一个

“标准”宏 MIN,这个宏输入两个参数并返回较小的一个。

答案:

#define MIN(A,B) ((A)<=(B)?(A):(B))

9.const 有什么用途?

答案:

(1)可以定义 const 常量。

  (2)const 可以修饰函数的参数和返回值,甚至函数的定义体。被 const 修饰的东西都受

到强制保护,可以预防意外的变动,能提高程序的健壮性。

10.const 与#define 相比有什么不同?

答案:

C 语言可以用 const 定义常量,也可以用#define 定义常量,但是前者比后者有更多

的优点:

(1)const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检

查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会发生意料不
到的错误。

(2)有些集成的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。

11.说明 sizeof 和 strlen 之间的区别。

解析:

第一个例子:
char *ss = "0123456789";
sizeof(ss)结果为 4,ss 是指向字符串常量的字符指针。
sizeof(*ss)结果为 1,*ss 是第一个字符。
第二个例子:
char ss[] = "0123456789";