如果将 C 文件包含在另一个文件中,则为 C 文件扩展名
C file extension if you include C file inside another
我有一个包含所有静态函数的 C 文件,与同一个子任务相关。
有些函数很长 - 20-30 行。
我想将它包含在另一个 C 文件中。
文件扩展名必须是什么(才能考虑专业)。我应该做成H文件吗?
include C file inside another
不,不是这样。按照惯例,
.c
[源文件] 用于编译和 link 编辑
.h
[头文件]有没有include
d.
C file with all static methods [] Shall I do it as H file?
没有。 理想情况下 头文件[.h
] 不应包含任何定义。应该只有声明。否则,如果头文件 .h
包含定义,而您 include
d 不止一次,您将面临多重定义问题。
我有点怀疑
C file with all static methods.
如果所有方法[功能]都是static
,怎么用呢?
但是,您的方法是获取所有相关的 .c
文件,编译并 link 它们一起形成最终的二进制文件。
如果您确实需要在多个 c 文件中共享相同的静态方法(为了编译器优化?),您应该将它们放在 .c
文件中而不是 .h
文件中。
如果您不需要将这些方法设为静态,您应该真正将它们放在一个与二进制文件相似的 .c
模块中,并且只在使用它们的模块之间共享定义。
示例
如果你真的必须共享静态函数并且你有一个真的很好的理由
static_functions.c(我将其命名为static_functions.inc.c,但这是个人口味)
static int max(int a, int b) {
if (a > b)
return a;
return b;
}
module-x.c 对于一些 x
#include "static_functions.c"
int use_max() {
return max(1,2);
}
仅编译 module-x.c
。
如果你真的不需要静态版本
internal_functions.h
#ifndef internal_functions_h
#define internal_functions_h
int max(int a, int b);
#endif
internal_functions.c
#include "internal_functions.h"
int max(int a, int b) {
if (a > b)
return a;
return b;
}
module-x.c 对于一些 x
#include "internal_functions.h"
int use_max() {
return max(1,2);
}
然后和link一起编译internal_functions.c
和module-x.c
。
要仅在本地定义,您不需要在其他地方使用或运送您的 internal_functions.h
。
不包括单独的 c 文件。按原样分别编译即可。
假设您有两个包含代码的文件:main.c 和 include.c。
而不是在 main.c 中包含 #include "include.c"
,当您编译 link 目标文件时:
gcc main.c include.c
20-30 行并不长。 200-300 行越来越长,但仍然不能保证单独的文件。
如果 20 行函数有自己的文件,大多数项目将难以管理。
只需将函数放入 .c
文件中并声明它们 static
。
我不知道你使用的是什么构建工具,但传统的 'make' 可能会被 .c
搞糊涂,除非你引入更多的规则和纪律。
如果您确实将它们放在另一个文件中,请按照其他人的建议为其添加 .inc
后缀。
我通常只看到有人在 .inc
由外部工具维护时这样做。
我有一个包含所有静态函数的 C 文件,与同一个子任务相关。
有些函数很长 - 20-30 行。
我想将它包含在另一个 C 文件中。
文件扩展名必须是什么(才能考虑专业)。我应该做成H文件吗?
include C file inside another
不,不是这样。按照惯例,
.c
[源文件] 用于编译和 link 编辑.h
[头文件]有没有include
d.
C file with all static methods [] Shall I do it as H file?
没有。 理想情况下 头文件[.h
] 不应包含任何定义。应该只有声明。否则,如果头文件 .h
包含定义,而您 include
d 不止一次,您将面临多重定义问题。
我有点怀疑
C file with all static methods.
如果所有方法[功能]都是static
,怎么用呢?
但是,您的方法是获取所有相关的 .c
文件,编译并 link 它们一起形成最终的二进制文件。
如果您确实需要在多个 c 文件中共享相同的静态方法(为了编译器优化?),您应该将它们放在 .c
文件中而不是 .h
文件中。
如果您不需要将这些方法设为静态,您应该真正将它们放在一个与二进制文件相似的 .c
模块中,并且只在使用它们的模块之间共享定义。
示例
如果你真的必须共享静态函数并且你有一个真的很好的理由
static_functions.c(我将其命名为static_functions.inc.c,但这是个人口味)
static int max(int a, int b) {
if (a > b)
return a;
return b;
}
module-x.c 对于一些 x
#include "static_functions.c"
int use_max() {
return max(1,2);
}
仅编译 module-x.c
。
如果你真的不需要静态版本
internal_functions.h
#ifndef internal_functions_h
#define internal_functions_h
int max(int a, int b);
#endif
internal_functions.c
#include "internal_functions.h"
int max(int a, int b) {
if (a > b)
return a;
return b;
}
module-x.c 对于一些 x
#include "internal_functions.h"
int use_max() {
return max(1,2);
}
然后和link一起编译internal_functions.c
和module-x.c
。
要仅在本地定义,您不需要在其他地方使用或运送您的 internal_functions.h
。
不包括单独的 c 文件。按原样分别编译即可。
假设您有两个包含代码的文件:main.c 和 include.c。
而不是在 main.c 中包含 #include "include.c"
,当您编译 link 目标文件时:
gcc main.c include.c
20-30 行并不长。 200-300 行越来越长,但仍然不能保证单独的文件。 如果 20 行函数有自己的文件,大多数项目将难以管理。
只需将函数放入 .c
文件中并声明它们 static
。
我不知道你使用的是什么构建工具,但传统的 'make' 可能会被 .c
搞糊涂,除非你引入更多的规则和纪律。
如果您确实将它们放在另一个文件中,请按照其他人的建议为其添加 .inc
后缀。
我通常只看到有人在 .inc
由外部工具维护时这样做。