C语言编译 链接

xiaoxiao2021-02-28  128

如何防止头文件被重复包含

#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

}

转载请注明原文地址: https://www.6miu.com/read-48395.html

最新回复(0)