gpt4 book ai didi

c - 为什么 extern 声明应该在 .c 文件之外(根据 linux 编码风格)

转载 作者:太空狗 更新时间:2023-10-29 11:05:03 25 4
gpt4 key购买 nike

根据 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"

==>不提示

我想明白为什么这样更好

我的猜测。理想情况下,代码被拆分成文件以便模块化代码(每个文件是一个模块)模块导出的接口(interface)放在头文件中,以便其他模块(或 .c 文件)可以包含它们。所以如果任何模块要对外暴露一些变量,那么就必须在模块对应的头文件中添加extern声明。

同样,每个模块(.c 文件)都有一个对应的头文件似乎有很多头文件。

最佳答案

将 a.h 也包含在 a.c 文件中会更好。这样编译器就可以验证声明和定义是否相互匹配。

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 无论如何都不会是头文件中的唯一元素,因此您不会节省文件数。

关于c - 为什么 extern 声明应该在 .c 文件之外(根据 linux 编码风格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com