如何在C语言中从外部的.c文件调用函数?

67

我的文件是

// main.c  

#include <ClasseAusiliaria.c>

int main(void) {
    int result = add(5,6);
    printf("%d\n", result);
}  

// add.c  

int add(int a, int b) {
    return a + b;
}

1
你应该在头文件(例如ClasseAusiliaria.h)中导出签名为 int addizione(int a, int b) 的函数。 - Massimiliano
1
https://dev59.com/5G025IYBdhLWcg3wnXSf - kol
跟进这个帖子,这可能会给你一些想法。如何在一个C源文件中包含另一个? - Varo
8个回答

48

使用双引号#include "ClasseAusiliaria.c" [不要使用尖括号(< >)]

我更喜欢在相同的目录/文件夹中保存带有.h扩展名的文件。 [参考链接]

简而言之: 请将#include <ClasseAusiliaria.c>替换为 #include "ClasseAusiliaria.c"


19
为什么您更喜欢使用.h文件而不是.c文件?它们有什么区别吗? - ProtoTyPus
2
为什么使用.h文件更好:https://dev59.com/S3VC5IYBdhLWcg3woCrN#232710 - Nir Duan
一个小问题。我有一个声明结构体和方法的头文件,以及相应的 .c 文件来定义它们。如果该方法以结构体作为参数,如何避免在另一个定义主方法的 .c 文件中包含 .c 文件? - stdout

15

请将您的 Main.c 文件更改如下:

#include <stdlib.h>
#include <stdio.h>
#include "ClasseAusiliaria.h"

int main(void)
{
  int risultato;
  risultato = addizione(5,6);
  printf("%d\n",risultato);
}

像这样创建ClasseAusiliaria.h

extern int addizione(int a, int b);

我编译并运行了您的代码,结果得到

11

6
你必须在头文件中声明int add(int a, int b);(注意分号),并将该文件包含到两个文件中。 将其包含到“Main.c”中,可以告诉编译器如何调用该函数。 将其包含到第二个文件中,可以验证声明的有效性(如果声明和实现不匹配,编译器会报错)。
然后你必须将这两个*.c 文件编译成一个项目。详细信息取决于编译器。

5

这里有很多优秀的贡献,但还是让我来增加我的。

首先我注意到的是,在主文件中你没有承诺你将创建一个名为add()的函数。这可以在主文件中像这样完成:

    int add(int a, int b); 

在您的主函数之前,需要定义add函数,这样您的主函数才能识别add函数并尝试查找其可执行代码。因此,您的文件应该是:

Main.c

    int add(int a, int b);

    int main(void) {
        int result = add(5,6);
        printf("%d\n", result);
    }  

增加功能

// add.c
    int add(int a, int b) {
        return a + b;
    }

5
创建一个名为classAusiliaria.h的文件,在其中提供你的方法签名。
现在,不要包含这个.c文件,而是包含这个.h文件。

它告诉我在目录中找不到文件! - ProtoTyPus
1
使用""而不是<>,进行#include"classAusiliaria.h" - Kraken

4
您可以包含 .c 文件,从逻辑上讲没有问题,但按照标准来隐藏函数实现,提供二进制、头文件和源文件技术,其中头文件用于定义函数签名,而源文件则包含实现。当您将项目出售给外部时,只需发送头文件和二进制文件(libs 和 dlls),以隐藏函数实现的主要逻辑。
这里的问题是,由于您正在包含与发生包含的文件位于同一目录中的文件,因此必须使用 "" 而不是 <>。这对 .c 和 .h 文件都很常见。

2
 write main.c like this - 
 caution : while linking both main.0 and ClasseAusiliaria.o should be 
 available to linker.

 #include <stdlib.h>
 #include <stdio.h>
 extern int addizione(int a, int b)

 int main(void)
 {
     int risultato;
     risultato = addizione(5,6);
     printf("%d\n",risultato);
 }

2

您不应该在其他c文件中包含c文件。相反,应该创建一个头文件,在其中声明要调用的函数。 像这样: 文件ClasseAusiliaria.h:

int addizione(int a, int b); // this tells the compiler that there is a function defined and the linker will sort the right adress to call out.

在您的Main.c文件中,您可以包含新创建的头文件:
#include <stdlib.h>
#include <stdio.h>
#include <ClasseAusiliaria.h>

int main(void)
{
    int risultato;
    risultato = addizione(5,6);
    printf("%d\n",risultato);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接