C语言编译 链接

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

#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

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值