为什么extern声明应该在.c文件之外(根据linux编码样式)
作者:互联网
根据checkpatch.pl脚本“外部声明在.c文件外部”
(用于检查补丁是否遵循编码风格)
注意:这在没有编译警告的情况下工作得很好
通过将extern声明放在.h文件中,可以解决此问题.
a.c
-----
int x;
...
b.c
----
extern int x;
==> checkpatch抱怨
a.h
-----
extern int x;
a.c
----
int x;
b.c
----
#include "a.h"
==>不抱怨
我想了解为什么这更好
我的猜测.
理想情况下,将代码拆分为文件,以便对代码进行模块化(每个文件都是一个模块)
模块导出的接口放置在头文件中,以便其他模块(或.c文件)可以包括它们.因此,如果任何模块要在外部公开某些变量,则必须在与该模块相对应的Header文件中添加extern声明.
同样,具有与每个模块相对应的头文件(.c文件)似乎
到许多头文件.
解决方法:
在a.c文件中也包含a.h甚至会更好.这样,编译器可以验证声明和定义是否匹配.
a.h
-----
extern int x;
a.c
----
#include "a.h" <<--- add this
int x;
b.c
----
#include "a.h"
正如您所假设的那样,该规则的原因是我们应该使用编译器来检查我们在做什么.细微的细节要好得多.
如果我们允许在各处使用extern声明,那么如果我们想将x更改为其他类型,就会遇到麻烦.我们必须扫描多少个.c文件才能找到所有extern int x?很多.如果这样做,我们可能还会发现一些extern char x错误.糟糕!
仅在头文件中包含一个声明,并在需要的地方包含它,为我们节省了很多麻烦.在任何实际项目中,x始终不是头文件中的唯一元素,因此您不必节省文件数.
标签:extern,linux-kernel,coding-style,c-3,linux 来源: https://codeday.me/bug/20191031/1974554.html