如何使用在多个 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
所以我有三个文件,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