我有一个包含所有静态函数的C文件,与一个相同的子任务相关。
有些功能很长 - 20-30行。
我想将它包含在另一个C文件中。
文件扩展名必须是什么(为了让专业人士认可)。我应该把它作为H档吗?
答案 0 :(得分:2)
20-30行并不长。 200-300行越来越长,但仍然不保证单独的文件。 如果20行函数有自己的文件,大多数项目将无法管理。
只需将这些功能放入他们使用过的.c
文件中,然后将其声明为static
。
我不知道你使用的构建工具是什么,但是传统的制作工具是什么?'可能会被.c
弄糊涂,除非你引入进一步的规则和纪律。
如果你把它们放在另一个文件中,请按照其他人的建议给它.inc
后缀。
我通常只看到人们在外部工具维护.inc
时执行此操作。
答案 1 :(得分:1)
将C文件包含在另一个
中
不,不是这样。通常,
.c
[源文件] 旨在编译和链接在一起.h
[页眉文件] 是include
d。带有所有静态方法的C文件[]我应该把它作为H文件吗?
没有。 理想情况下头文件[.h
]不应包含任何定义。应该只有声明。否则,如果标题文件.h
包含定义,并且您不止一次include
,那么您将面临多个定义问题。
我对
有点怀疑包含 所有 静态方法的C文件。
如果所有方法[函数]是static
,那么如何使用它们呢?
然而,您的方法是获取所有相关的.c
文件,将它们编译并链接在一起形成最终的二进制文件。
答案 2 :(得分:1)
如果你真的需要在多个c文件之间共享相同的静态方法(用于编译器优化?),你应该将它们放在.c
文件而不是.h
文件中。
如果您不需要将这些方法设置为静态,那么您应该将它们放在单个.c
模块中,该模块对二进制文件很有用,并且只使用它们共享模块中的定义。
示例
static int max(int a, int b) {
if (a > b)
return a;
return b;
}
#include "static_functions.c"
int use_max() {
return max(1,2);
}
仅编译module-x.c
。
#ifndef internal_functions_h
#define internal_functions_h
int max(int a, int b);
#endif
#include "internal_functions.h"
int max(int a, int b) {
if (a > b)
return a;
return b;
}
#include "internal_functions.h"
int use_max() {
return max(1,2);
}
然后将internal_functions.c
和module-x.c
汇总并链接在一起。
要将定义仅限于本地,您无需在其他位置使用或发送internal_functions.h
。
答案 3 :(得分:1)
不要包含单独的c文件。只需按原样单独编译它们。
假设您有两个代码的文件:main.c和include.c。
当您编译链接目标文件时,而不是在main.c中使用#include "include.c"
:
gcc main.c include.c