为了账号安全,请及时绑定邮箱和手机立即绑定

gcc 不能直接链接呀!

max.h :

int max(int a,int b);

main.c:

#include <stdio.h>
//#include"max.h"
int main()
{   int a = 21;    
    int b =12;    
    int num = max(a,b);    
    printf("max value = %d\n",num);
}

已经生产了 max.o 并编译

gcc max.o main.c -o main

warning:   implicit declaration of function ‘max’

不能直接干呀。

但是提示完后,成功编译出 “main” 程序。


正在回答

1 回答

已经解决:
当主体文件 没有声明时(即没有包含的头文件)就会报错;对其的一些**猜测**:

 #include <stdio.h>

//#include"max.h"

int main()
{   int a = 21;    
    int b =12;    
    int num = max(a,b);    
    printf("max value = %d\n",num);
}

max.h ↓

int max(int a,int b);

max.c ↓

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

没有包含头文件,也就是没有声明函数,但之前进行 了  compile and assemble. 生成 max.o 文件

gcc max.c -c -o max.o

于是

gcc max.o max.c -o outfile
gcc main.c max.o -o out

警告提示:warning: implicit declaration of function ‘max’
但成功生成 文件 out
以上是没有 定义 函数。

如果导入 头文件 (定义了 max 函数),或着直接在 main 中定义max函数,再和 *.o 文件 链接编译,

gcc main.c max.o -o out

就不会出现 警告和错误。


0 回复 有任何疑惑可以回复我~
#1

Vseelove 提问者

也就是说在 *.c(待编译文件)里的函数 在 *.o 里就可以了,只不过没有**声明** 就会警告。
2020-03-26 回复 有任何疑惑可以回复我~
#2

Vseelove 提问者

有个词错了,头文件 是声明,不是定义。
2020-03-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

gcc 不能直接链接呀!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信