【发布时间】:2021-05-25 17:40:27
【问题描述】:
在 C 中是否经常出现 .c 文件,包括其他内部 .c 文件以复制/粘贴方式具有静态变量/函数?就像一个由许多 .c 文件组成的 .c 文件一样,您希望所有内容都保持私有而不是在头文件中声明。
例子:
交流
static int a() {
return 3;
}
b.c
static int b() {
return 6;
}
c.h
int c();
c.c
#include "c.h"
#include "a.c"
#include "b.c"
int c() {
return a() + b();
}
main.c
#include <stdio.h>
#include "c.h"
int main() {
printf("%d\n", c())
}
编译
clang -c c.c
clang -c main.c
clang c.o main.o -o test.exe
【问题讨论】:
-
包含源文件并不常见。如果您想做一些“私有”声明或结构定义等,这些声明或结构定义等在项目的一些但不是所有源文件之间共享,请为此创建第二个头文件。没有什么能阻止你拥有
c.h和c_private.h。 -
仅供参考,
#include "anything.c"是一种自动设计气味。当您声明“您希望将所有内容保密”时,这与您的设计完全矛盾。 a.c 和 b.c 的内容都被#include吸进了 c.c。 “私人”就这么多。没有什么能阻止其他人做确切同样的事情。 -
如果你
#includeing 一个 .c 文件,你做错了。语言并没有阻止你这样做,但这不是通常的约定。而且,如果您想与他人合作开展更大的项目,则应该学习更传统的做事方式。 -
然后做你已经做的事情:将单独的源文件作为单独的翻译单元构建到单独的目标文件中,然后将它们链接在一起。
-
没有什么可以阻止您拥有多个翻译单元,这些翻译单元为在单个头文件中声明的函数提供定义。
标签: c header-files translation-unit