了解如何从 C 中的另一个源文件调用函数

Understanding how to call functions from another source file in C

我正在尝试正确理解如何从 C 中的另一个源文件调用 C 函数。我有一个我正在尝试开始工作的简单示例。我有两个函数,function1 和 function2,它们包含在 file.c 中。我正在尝试从 main.c 调用函数 2,但收到错误 "undefined reference to function 2".

main.c

#include <stdio.h>
#include <stdlib.h>
#include "file.h"
int main()
{
    int result = function2(3);
    printf("Result = %d  ", result);
    return 0;
}

file.c

int function1(int a)    /* Function 1  definition */
{
    int val = a*a;

    return val;
}

int function2(int val)    /* Function 2 definition */
{
    return val +5;
}

file.h

#ifndef FILE_H_INCLUDED
#define FILE_H_INCLUDED
extern int function1(int a) ;
extern int function2(int val);


#endif // FILE_H_INCLUDED

(我知道 function1 和 function2 可以组合成一个函数,但我想了解为什么这个示例不起作用!-谢谢)

您的源代码是正确的。您可能没有做的是 link 将两个目标文件组合在一起以创建可执行文件。

从命令行,将两个文件编译成目标文件

cc -Wall -std=c11 -c main.c

创建main.o

cc -Wall -std=c11 -c file.c

创建file.o

然后link他们

cc -o my-executable main.o file.o

然后您将得到一个名为 my-executable 的可运行二进制文件。如果您有一个 IDE,将有一个等效的方法来执行上述操作,但它将依赖于 IDE。

  • 在代码块中,文件 -> 新建 -> 项目。
  • 选择控制台应用程序。接下来。
  • 选择语言 C. 下一步。
  • 选择项目标题路径等。下一步
  • 编译器应该是GCC,不要动任何设置。完成。
  • 在项目window中,将相关文件添加到项目中。您已经得到一个 main.c,因此创建一个 file.c 并添加它。加上h文件也很方便,虽然不是必须的。
  • 构建 & 运行.
  • 输出:结果 = 8

将您的 copy/paste 代码转换为 main.c file.c file.h

效果很好

其他与问题无关的好建议:

  • 设置 -> 编译器 -> 编译器标志选项卡。勾选-Wall -Wextra 和-pedantic-errors对应的选项。如果没有 C11 选项,请添加一个。 See this.

  • 正如有人指出的那样,您应该始终从 file.c

  • #include "file.h"