C文件扩展名,如果您在另一个文件中包含C文件

时间:2015-02-10 07:16:01

标签: c header-files

我有一个包含所有静态函数的C文件,与一个相同的子任务相关。

有些功能很长 - 20-30行。

我想将它包含在另一个C文件中。

文件扩展名必须是什么(为了让专业人士认可)。我应该把它作为H档吗?

4 个答案:

答案 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_functions.c(我将它命名为static_functions.inc.c,但那是个人风格)

static int max(int a, int b) {
    if (a > b)
        return a;
    return b;
}

module-x.c for some 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 for some x

#include "internal_functions.h"
int use_max() {
    return max(1,2);
}

然后将internal_functions.cmodule-x.c汇总并链接在一起。 要将定义仅限于本地,您无需在其他位置使用或发送internal_functions.h

答案 3 :(得分:1)

不要包含单独的c文件。只需按原样单独编译它们。

假设您有两个代码的文件:main.c和include.c。

当您编译链接目标文件时,而不是在main.c中使用#include "include.c"

gcc main.c include.c