【问题标题】:C: linking a different C file in a Driver program?C:在驱动程序中链接不同的 C 文件?
【发布时间】:2017-09-30 15:00:04
【问题描述】:

好吧,我正在制作一个可以实现各种形式的数据结构的程序,即链表队列堆栈。并为每个创建单独的文件,现在我想在单个驱动程序中使用每个单独的文件。 我已将文件链接为:

#include"filename.c"

但是显示一个错误没有这样的文件或目录。是的,我需要实现以使用驱动程序中包含文件的函数的任何其他事情。

【问题讨论】:

  • 首先,您可以包含实现文件 (*.c),但这通常没有意义。这就是头文件 (*.h) 的用途,仅描述 接口。除此之外,获得 no such file or directory 意味着无论您的 filename.c 在哪里,它都不在您的预处理器使用的搜索路径中(通常包括您正在编译的任何主文件的路径)。
  • 包括“filename.h”并确保它与您的驱动程序所在的目录相同。否则在编译期间使用 -I
  • 哦...“#includeing”文件没有链接。
  • @FelixPalmen 好吧,这就是我问的问题“如何link 一个 C 文件到另一个。And yeah, any other thing which i need to implement to use the functions of included files in the driver program . 在这里我只问你......!!!
  • @FelixPalmen 你能把你的第一条评论说清楚吗??

标签: c header linker


【解决方案1】:

您不包含.c 文件,而是包含.h 文件。

假设您的文件夹包含您的 main.c 文件和一个 datastructs.c 文件,请创建一个包含所有函数声明的 datastructs.h 文件。

datastructs.c

#include <stdio.h>

#include "datastructs.h"

void hello() {
    printf("hello, world!\n");
}

datastructs.h

void hello();

现在,在 main.c - 包含 main 函数的 C 文件中 - 包含 datastructs.h 文件并调用您想要的所有函数:

#include "datastructs.h"

void main() {
    hello();
}

确保编译您正在使用的每个源代码,它会确保正确链接所有内容:

gcc datastructs.c main.c -o main

这是一种非常基本的方法,还有更多方法 - 可能比这更好 - 但它会完成工作。

一定要看看Makefilemake是如何工作的,这样你才能更好地处理这类任务。

【讨论】:

  • 首先你可以包含 .c 文件,如果你想改写第一句来扩展它。其次,不要使用像“datastructs.h”这样的文件名,因为这会让读者误以为只有数据结构最终出现在单独的文件中(将其更改为 foo.h 以表明这是任意选择)第三也许你可以解释如何使用 c 生成目标文件...第四不要假设用户正在使用 gcc。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多