【问题标题】:C: Using functions from files within in the same projectC:在同一个项目中使用文件中的函数
【发布时间】:2012-06-05 03:39:14
【问题描述】:

我的问题没有直接链接到一个例子,而是一个整体的问题。当我使用 C++ 进行编码时,我发现(在查看了一些线程之后)为了使用同一项目中不同文件中的函数,我要么需要一个头文件。因此,例如,如果我在名为“main.cpp”的文件中有主函数,并且我想在另一个名为“problem1.cpp”的文件中使用函数“prob1()”,我将需要使用标题文件。

让我感到困惑的是,为什么我不必担心用 C 编程?在我用C编程的时候,为了使用不同文件中的函数,我可以直接调用函数。

感谢任何帮助/解释。谢谢!

【问题讨论】:

  • 如果您觉得以下答案解决了您的问题,您应该接受其中之一。

标签: c++ c function header using


【解决方案1】:

您的 C 编译器可以隐式声明该函数,但您应该自己这样做。如果您打开警告,您会看到如下内容:

file1.c: warning: implicit declaration of function ‘func_from_f2’

file1.c编译时,这个隐含的声明将被用来创建一个目标文件,然后当链接 你只需要希望函数确实存在并且声明正确,这样目标文件才能成功链接在一起。

如果没有,链接器会在某处给你一个错误:

undefined reference to `func_from_f2'


你也不一定需要一个头文件,你可以简单地在你的源文件中包含函数的声明/原型(#include 指令基本上是为你做的)。 IE。以下将在没有警告的情况下正常工作:

file1.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}

file2.c

#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}


但是,通常最好的做法是使用头文件:

file1.c

#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}

file2.h

#ifndef FILE2_H
#define FILE2_H

void func_from_f2(void);

#endif

file2.c

#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}

【讨论】:

  • 感谢您提供清晰的示例。 :D 我想我现在明白了。我想我会研究标题以及如何格式化+使用它们。
  • 您错过了让这一切变得有价值的一个好习惯。 #include "file2.h" 来自file2.c,这将使编译器同时看到原型和定义并验证它们是否匹配。
  • @BenVoigt:该死的我也是。
【解决方案2】:

在 C 语言中,如果您没有提供正确的原型,编译器会猜出正确的原型。它经常猜错,然后你的程序就会中断。

无论是 C 还是 C++,最好在头文件中提出声明,同时将 #included 放入实现文件中,编译器可以在其中检查不匹配。

【讨论】:

  • 好的,明白了。所以基本上,使用标题来避免任何混淆并确保编码清晰。如果我没记错的话,C++ 强制执行此操作,而 C 则更宽松一些。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2018-10-07
  • 1970-01-01
  • 2022-08-16
  • 2020-02-24
相关资源
最近更新 更多