0

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

令我困惑的是为什么我不必担心用 C 编程?当我用 C 编程时,为了使用来自不同文件的函数,我可以直接调用该函数。

任何帮助/解释表示赞赏。谢谢!

4

2 回答 2

3

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

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

编译file1.c时,这个隐式声明将用于创建一个目标文件,然后在链接时您只需要希望函数确实存在并且声明正确,以便目标文件可以成功链接在一起。

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

undefined reference to `func_from_f2'


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

文件1.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}

文件2.c

#include <stdio.h>

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


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

文件1.c

#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}

文件2.h

#ifndef FILE2_H
#define FILE2_H

void func_from_f2(void);

#endif

文件2.c

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

void func_from_f2(void)
{
   puts("hello");
}
于 2012-06-05T03:55:03.993 回答
2

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

无论是 C 还是 C++,在头文件中提出声明总是一个好主意,该头文件也将#included 放入实现文件中,编译器可以在其中检查不匹配。

于 2012-06-05T03:43:53.430 回答