当前位置: 技术问答>linux和unix
一个 Linux 下 C 语言开发的常见问题:如何包含头文件?
来源: 互联网 发布时间:2015-07-27
本文导语: 我有一个 main.c 和main.h 的文件, //------------------------ // max.h #include #include int max(int x,int y); //------------------------ // max.c #include "max.h" int max(int x,int y) { return x>y?x:y; } //------------------------ // main.c #include...
我有一个 main.c 和main.h 的文件,
//------------------------
// max.h
#include
#include
int max(int x,int y);
//------------------------
// max.c
#include "max.h"
int max(int x,int y)
{
return x>y?x:y;
}
//------------------------
// main.c
#include "max.h"
int main()
{
int i = max(5,30);
printf("n max(5,30)=%d",i);
}
但是程序编译的时候提示link错误:undefined referance max(int x,int y);
也就是说:我包含的的max(int x,int y)函数,程序找不到相应的实现,而我这个实现在 max.c
文件中,但是如果我的 main.c文件的头文件的包含文件改为:#include "max.c"
则可以正常的编译通过,大家在做此类包含头文件时是怎么做的?
我一般这样考虑:在.h的头文件中声明函数原型,在.c文件中说明具体的函数实现。
但是现在的问题是:只包含.h文件就找不到函数的原型了,必须包含.c文件?
//------------------------
// max.h
#include
#include
int max(int x,int y);
//------------------------
// max.c
#include "max.h"
int max(int x,int y)
{
return x>y?x:y;
}
//------------------------
// main.c
#include "max.h"
int main()
{
int i = max(5,30);
printf("n max(5,30)=%d",i);
}
但是程序编译的时候提示link错误:undefined referance max(int x,int y);
也就是说:我包含的的max(int x,int y)函数,程序找不到相应的实现,而我这个实现在 max.c
文件中,但是如果我的 main.c文件的头文件的包含文件改为:#include "max.c"
则可以正常的编译通过,大家在做此类包含头文件时是怎么做的?
我一般这样考虑:在.h的头文件中声明函数原型,在.c文件中说明具体的函数实现。
但是现在的问题是:只包含.h文件就找不到函数的原型了,必须包含.c文件?
|
这样编译
gcc -c max.c
gcc -c main.c
gcc main.o max.o -o main
gcc -c max.c
gcc -c main.c
gcc main.o max.o -o main
|
gcc -o main main.c max.c
|
改max.h中的
int max(int x,int y);
为
extern int max(int ,int );
在编译试试看
把你的编译方法也贴出来看看?
int max(int x,int y);
为
extern int max(int ,int );
在编译试试看
把你的编译方法也贴出来看看?
|
你如何编译的?把编译明令贴出来?
你的包含方法没错,肯定是编译明令错了
你的包含方法没错,肯定是编译明令错了
|
You only compile and link main.c file, and you should execute the following command
gcc -o main main.c max.c
gcc -o main main.c max.c
|
头文件导入