了解如何从 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"
我正在尝试正确理解如何从 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"