如何使用在多个 header 中声明的函数

How to use a function which was declared in more than one header

所以我有三个文件,main.c,a.h,b.h
在所有三个文件中,我都声明了以下函数

int test(int a, int b)
{
  if(a>b)
    return a;
  else return b;
}

我是否可以在主程序中使用该函数,但从不同的位置(从 a.h,然后从 b.h,然后从 main.c),因为现在我有此错误:错误:重新定义测试?

为了更好的理解,我将post声明在这里:

Write test() in two libraries, a.h and b.h. Include both libraries in a program. Investigate how can I use test() from a.h or b.h. What if I define test() also in the main program and I want to use the test() from main program, library a.h or b.h ?

main.c中的代码是这样的:

#include <stdio.h>
#include <stdlib.h>
#include "a.h"
#include "b.h"
int test(int a, int b) //Function for showing the max
{
    if(a > b)
        return a;
    else return b;
}

int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    test(a, b);

    return 0;
}

a.h中的代码与b.h中的代码相同:

#ifndef CODE_a_H
#define CODE_a_H

int test(int a, int b) //Function for showing the max
{
    if(a > b)
        return a;
    else return b;
}

#endif

在怀疑中。

也许你应该在这个作业中学到一些东西。而“某事”可能是“不要这样做”。

您显然已经了解到,由于重复的符号,这将不起作用。

您可以在预处理器的帮助下生成一个工作程序。

test()的定义扩展为

#ifndef CODE_a_H
#define CODE_a_H

#ifndef TEST_DEFINED
#define TEST_DEFINED
int test(int a, int b) //Function for showing the max
{
    if(a > b)
        return a;
    else return b;
}
#endif
#endif

根据 #include 在您的主程序中的顺序,您包含的第一个文件的定义将在程序中结束。

您不能在两个不同的地方(我指的是 .c 文件)定义同一个函数并编译所有文件。

如果你愿意,你可以通过条件编译或单独编译文件来控制它,link 根据需要。

primetest.h

#ifndef __PRIMETEST__
#define __PRIMETEST__

int primtest(int a, int b);

#endif /* __PRIMETEST__ */

primetest.c

int primtest(int a, int b) //Function for showing the max
{
    if(a > b)
        return a;
    else return b;
}

primetest-2.c

/* generally we have different code here than previous one*/

int primtest(int a, int b) //Function for showing the max
{
    if(a > b)
        return a;
    else return b;
}

main.c

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

int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    primtest(a, b);
    return 0;
}

您可以通过以下方式编译

gcc main.c primtest.c

gcc main.c primtest-2.c