如何防止头文件被重复包含
#ifndef _HEADERNAME_H
#define _HEADERNAME_H
...//(头文件内容)
#endif
编译器的基本任务只是理解程序,然后把理解的结果翻译成对应的机器码,并不需要生成可执行文件。编译器只需要确认每个标识符的类型,做到能认识它就可以了。编译器的另一个特点是单元编译,编译某个.c文件时,对其它的.c文件一无所知,其实也不需要知道。
链接器的功能是在内存中定位这个标识符,链接器要唯一地找到它。
对变量来说,带extern的就是不申请内存的声明;对函数来说,只给出函数的接口定义,后面跟一个分号,就是不申请内存。无论变量还是函数,不分配内存的声明,可以声明很多次,可以放到.h文件中,也可以放到.c文件中;但是分配内存的声明,你只能声明一次,而且必须放在.c文件中。
按照C++标准编译文件的时候,为了支持函数重载,编译器执行一项name mangle的过程。
为了支持.c和.cpp混合编程,使用extern "C"关键字。这个关键字主要是告诉编译器不要进行name mangle。C语言中并不支持extern "C",如果把extern "C"放到.h文件中,如果.c文件又包含了这个文件,那么就会出现编译错误。所以写成如下的形式,这样的头文件既可以被C文件包含,也可以被C++文件包含。
#ifdef __cplusplus
extern"C"
{
#endif
内容。。。。
#ifdef __cplusplus
}