qq_慕仔9282782
-o文件是把我们人写的代码翻译为计算机可以看懂的代码,翻译成01文件。
Vseelove
已经解决:
当主体文件 没有声明时(即没有包含的头文件)就会报错;对其的一些**猜测**:
#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
就不会出现 警告和错误。
qq__eqwGTW
我跟你的问题一样,但我有个猜想,你可以认证一下。老师前一张说新的gcc版本会自动补全一次include"max.c",老版本就不会,所以这里是不是需要我们在主函数加一个#include<max.o>或者max.c?虽然感觉并不是这么个问题
慕数据4473854
或者是include"max.c"
谢谢天喔开心果
-c 只编译不链接,产生.o文件,就是obj文件,不产生执行文件
慕UI8303664
在hello.c源文件里添加#include “max.h“,然后新建max.h文件,在max.h文件中进行生命:int max(int a,int b)
总有民女想推朕
找到错误了,我的min.h和max.h文件中忘加 ; 了
qq_叽里呱啦_fitDM6
假如你负责写max函数,最终你只发给编译好的max.o而不发max.c,那么队友将看不懂max.o里的一堆二进制代码。而如果他想知道max的函数原型就得靠你写个max.h告诉他
motoot
max.h 就是标准的c源文件,打开的就可以了,一般高级点的ide都可以自动定位到头文件.
慕粉004404296
不会有错的,比如说stdio。h这个库,它里面是定义好输入输出的模式的,而正常使用的也只是借用,而且。h哪里主要是为了分工时让对方知道都需要什么东西,以及类型。比如说:有一种新品种水果,你没吃过,而库就是为了讲解如何吃的方式,只是让你参考样子,不用管的。
慕码人5032126
qq_风雨无阻_22
并不是.o写进.h中 是各个源代码生成了.o文件 一样的 c++也可以用makefile
qq_风雨无阻_22
应该是软件的区别吧,我是在mac和linux下的,这两个系统下是符合标准的,也就是每个函数里面的变量都是局部的,是可以重名的。
Air00000
要gcc max.o min.o hello.c
Hello_Word_
实际上很多函数及结构体的定义是完全可以放在.c里面的,只不过当项目文件多的时候会不利于阅读和理解之前的代码,所以分开放,把一些定义之类的放到.h文件中,
卷枕头
gcc
幽菏雨墨空山静
警告是可以生成输出文件,提示你对后面的操作可能会出错。只有错误error才是不能生成输出文件。
wanxiang5623
肯定知道啊,通常函数编写是取得名字就是代表其功能,别人用的时候最多是不懂参数设置,所以用.h 文件进行声明,还可以在里面写注释
慕村4323340
。。。。想想都不可能
怪怪怪的仙人
贴代码看一下
宝慕林5388552
内存吧
懵奇的嘉
尝试着 rm a.out 把之前的删掉
慕粉2030253399
在主程序中加一句申明 :int max (int a,int b);
TigerSleepy
问题已解决,gcc编译c文件时,文件名应该加小写的.c,才能正确编译链接.o文件与main函数。
qq_愿时光安好_04050009
数据类型问题
qq_愿时光安好_04050009
慕九州4099559
有啊#include "max.o"
左手牵着右手0
Harbeth丶R
在主程序中加一句申明 :int max (int a,int b);
慕粉2046593521
想知道怎么查看。