代码改变世界

extern学习记录

2017-08-23 15:28  fanhuanliugang  阅读(137)  评论(0编辑  收藏  举报

1,在一个XX.c文中定义,在XX.h中声明需要加extern吗?

答:如果XX.c文件中#include XX.h了,那么就不用加extern了。

2,常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?
  答案与分析:
  如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); 和int f();
  当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。

3,纯粹用 C 语言语法的角度,你当然可以在 .h 中放任何东西,因为 #include 完全等价 于把 .h 文件复制 到 .c 中

.h 中应该都是一些宏定义和变量、函数声明,告诉别人你的程序“能干什么、该怎么用”

.c 中是所有变量和函数的定义,告诉计算机你的程序“该怎么实现”

如果一个 .h 被多个 .c 包含,而且 .h 中有对象(变量或函数)的定义,就会发生重复定义的错误了,声明可以无穷多次,定义只能一次。

解决:为了防止这种错误发生,在.h文件中加

#ifndef 

#define_h

#endif

例:

#ifndef __driver_cfg_h__
#define __driver_cfg_h__

#endif