C++面试必备:externC与头文件技巧解析

需积分: 3 1 下载量 155 浏览量 更新于2024-09-11 收藏 19KB TXT 举报
"C++面试全真试题" 在C++面试中,经常会涉及到以下几个关键知识点: 1. 外部链接(extern "C"):在C++中,为兼容C语言,我们需要使用`extern "C"`来声明函数或变量,以避免C++的名称修饰(name mangling)。这使得C++编译器按照C语言的规则处理这些符号,避免了不同编译器对重载函数和模板的名称处理差异。例如,C函数原型是`void foo(int x, int y)`,在C++中会被修改为`_foo_int_int`,使用`extern "C"`就可以保留原始名称。 2. 预处理器指令(#ifndef/#define/#endif):这是C/C++中的头文件保护机制,防止头文件被多次包含。如果在头文件顶部定义一个未定义的宏,然后在文件末尾取消定义,可以确保头文件只被包含一次,避免编译错误。 3. 引入头文件(#include <...> vs #include "..."):使用尖括号`<...>`引入系统库头文件,而双引号`"..."`用于引入项目内的自定义头文件。系统库通常位于标准路径中,而自定义头文件的位置可能因项目而异。 4. C/C++连接器:C++编译器会生成与C不同的目标文件格式,因此需要C++链接器来正确解析和合并这些文件。C++链接器可以处理C++的特性,如虚函数、模板等。 5. const关键字:在C++中,const有常量和常量指针两种用法。const常量可以在声明时初始化,但之后不能改变;const指针则可以改变指向的值,但不能改变指针本身。注意,const可以修饰函数参数,使得函数不能修改参数的值。 6. const与#define的区别:const是类型安全的,它可以应用于类的成员函数,支持作用域和类型检查,而#define是简单的文本替换,可能导致意料之外的行为,例如类型不匹配的问题。 7. sizeof运算符:sizeof返回变量或类型的字节数。对于动态分配的数组或对象,sizeof只能给出它们的基础类型大小,而不是实际分配的内存。例如,sizeof(char*)返回指针的大小,而不是字符串的长度。 8. sizeof与strlen的区别:sizeof是在编译时计算的,可以用于任何类型,包括未初始化的数组或指针。而strlen计算的是字符串的长度(直到遇到'\0'),它在运行时计算,只能用于C风格的字符串。 9. unsigned类型:unsigned类型用于表示非负整数,其大小等于对应的有符号整数类型。例如,sizeof(unsigned int)通常是4,即使在32位系统上,它也可以表示更大的正整数范围。 10. sizeof与动态分配:sizeof不适用于动态分配的内存,它不能提供动态分配数组或new操作符分配的对象的实际大小。对于动态数组,需要在分配时记录大小,或者使用其他方法来跟踪。 以上是C++面试中常见的技术点,掌握这些知识点有助于在面试中展示扎实的C++基础和解决问题的能力。