-o文件是把我们人写的代码翻译为计算机可以看懂的代码,翻译成01文件。
已经解决:
当主体文件 没有声明时(即没有包含的头文件)就会报错;对其的一些**猜测**:
#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
就不会出现 警告和错误。
我跟你的问题一样,但我有个猜想,你可以认证一下。老师前一张说新的gcc版本会自动补全一次include"max.c",老版本就不会,所以这里是不是需要我们在主函数加一个#include<max.o>或者max.c?虽然感觉并不是这么个问题
或者是include"max.c"
-c 只编译不链接,产生.o文件,就是obj文件,不产生执行文件
假如你负责写max函数,最终你只发给编译好的max.o而不发max.c,那么队友将看不懂max.o里的一堆二进制代码。而如果他想知道max的函数原型就得靠你写个max.h告诉他
max.h 就是标准的c源文件,打开的就可以了,一般高级点的ide都可以自动定位到头文件.
不会有错的,比如说stdio。h这个库,它里面是定义好输入输出的模式的,而正常使用的也只是借用,而且。h哪里主要是为了分工时让对方知道都需要什么东西,以及类型。比如说:有一种新品种水果,你没吃过,而库就是为了讲解如何吃的方式,只是让你参考样子,不用管的。
并不是.o写进.h中 是各个源代码生成了.o文件 一样的 c++也可以用makefile
应该是软件的区别吧,我是在mac和linux下的,这两个系统下是符合标准的,也就是每个函数里面的变量都是局部的,是可以重名的。
要gcc max.o min.o hello.c
实际上很多函数及结构体的定义是完全可以放在.c里面的,只不过当项目文件多的时候会不利于阅读和理解之前的代码,所以分开放,把一些定义之类的放到.h文件中,
gcc
警告是可以生成输出文件,提示你对后面的操作可能会出错。只有错误error才是不能生成输出文件。
肯定知道啊,通常函数编写是取得名字就是代表其功能,别人用的时候最多是不懂参数设置,所以用.h 文件进行声明,还可以在里面写注释
。。。。想想都不可能
贴代码看一下
内存吧
尝试着 rm a.out 把之前的删掉
在主程序中加一句申明 :int max (int a,int b);
问题已解决,gcc编译c文件时,文件名应该加小写的.c,才能正确编译链接.o文件与main函数。
数据类型问题
有啊#include "max.o"
在主程序中加一句申明 :int max (int a,int b);
想知道怎么查看。
只是个警告
好像是因为没有声明
这只是一个warning啊,应该是能编译出结果的,我的也有警告信息,但是我没管它。如果你不喜欢出warning信息的话,就加上include吧。