//源文件b.c
void fun(int a, int b)
{
printf("%d", a + b);
}
//test.c
main()
{
int a, b;
scanf("%d%d", &a, &b);
fun(a, b);
system("pause");
}
程序能运行起来,为什么test.c中不用声明fun()函数,或者做个头文件b.h再#include一下,程序就能运行呢?
对c语言的编译和链接方面不太懂,望大神指导一下,谢谢啦!
9 个解决方案
#1
你把fun放下面试试
为啥非得放main上面
为啥非得放main上面
#2
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
#3
楼上很有道理 可能就是编译器的事
我试了一下报错 并不能运行
建议楼主贴出完整代码
大概你的编译器比较高级?
我试了一下报错 并不能运行
建议楼主贴出完整代码
大概你的编译器比较高级?
#4
如果你之前没有进行fun函数的宏定义应该是运行不成功的,编译阶段会在内核中将每个函数编译成一个号码,在Linux下用nm命令可看到每个函数在编译时的号码。
nm操作 nm+可执行文件名(如 nm a.out)
nm操作 nm+可执行文件名(如 nm a.out)
#5
那我还是截个图把,看着方便些
用的VS2013,就建了这两个.c文件
#6
应该是编译的问题,你运行这个程序了没有,什么结果?
#7
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
应该是编译的问题,你运行这个程序了没有,什么结果?
这个程序不复杂,输入两个值,得到是这两个值的和。
#8
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
应该是编译的问题,你运行这个程序了没有,什么结果?
这个程序不复杂,输入两个值,得到是这两个值的和。
我的意思是你按照我那样做,程序是不是也能正常运行,我想看看你们的都是什么情况
#9
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
#1
你把fun放下面试试
为啥非得放main上面
为啥非得放main上面
#2
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
#3
楼上很有道理 可能就是编译器的事
我试了一下报错 并不能运行
建议楼主贴出完整代码
大概你的编译器比较高级?
我试了一下报错 并不能运行
建议楼主贴出完整代码
大概你的编译器比较高级?
#4
如果你之前没有进行fun函数的宏定义应该是运行不成功的,编译阶段会在内核中将每个函数编译成一个号码,在Linux下用nm命令可看到每个函数在编译时的号码。
nm操作 nm+可执行文件名(如 nm a.out)
nm操作 nm+可执行文件名(如 nm a.out)
#5
如果你之前没有进行fun函数的宏定义应该是运行不成功的,编译阶段会在内核中将每个函数编译成一个号码,在Linux下用nm命令可看到每个函数在编译时的号码。
nm操作 nm+可执行文件名(如 nm a.out)
那我还是截个图把,看着方便些
用的VS2013,就建了这两个.c文件
#6
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
应该是编译的问题,你运行这个程序了没有,什么结果?
#7
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
应该是编译的问题,你运行这个程序了没有,什么结果?
这个程序不复杂,输入两个值,得到是这两个值的和。
#8
你把fun放下面试试
为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。
楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。
个人见解,欢迎指正。
应该是编译的问题,你运行这个程序了没有,什么结果?
这个程序不复杂,输入两个值,得到是这两个值的和。
我的意思是你按照我那样做,程序是不是也能正常运行,我想看看你们的都是什么情况
#9
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!