如果将 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[头文件]有没有included.

C file with all static methods [] Shall I do it as H file?

没有。 理想情况下 头文件[.h] 不应包含任何定义。应该只有声明。否则,如果头文件 .h 包含定义,而您 included 不止一次,您将面临多重定义问题。

我有点怀疑

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.cmodule-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 由外部工具维护时这样做。