了解如何从C中的其他源文件调用函数

时间:2017-11-28 15:45:26

标签: c codeblocks

我正在尝试正确理解如何从C中的另一个源文件调用C函数。我有一个简单的例子,我正在努力工作。我有两个函数,function1和function2,它们包含在file.c中。我试图从main.c调用函数2 bur接收错误"未定义引用函数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可以组合成一个函数,但我想理解为什么这个例子不起作用! - 谢谢)

2 个答案:

答案 0 :(得分:2)

  • 在Codeblocks中,文件 - &gt;新 - &gt;项目
  • 选择控制台应用程序。下一步。
  • 选择语言C.接下来。
  • 选择项目标题路径等。接下来。
  • 编译器应该是GCC,不要触摸任何设置。结束。
  • 在项目窗口中,将相关文件添加到项目中。你已经得到了一个main.c,所以创建一个file.c并添加它。添加h文件也很方便,但不是必需的。
  • 构建&amp;运行。
  • 输出:结果= 8

将代码复制/粘贴到main.c file.c file.h中可以正常工作

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

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

  • 正如有人指出的那样,你应该始终从file.c #include "file.h"

答案 1 :(得分:1)

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

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

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

创建main.o

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

创建file.o

然后链接他们

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

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