C 函数调用、头文件声明、编译链接相关问题

canghaizui 2017-08-09 10:08:07
最近看了C语言的东西,用VS2013写了个简单的程序运行了一下,有些疑问
//源文件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语言的编译和链接方面不太懂,望大神指导一下,谢谢啦!
...全文
378 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
canghaizui 2017-08-16
  • 打赏
  • 举报
回复
引用 7 楼 cfjtaishan 的回复:
[quote=引用 6 楼 qq_31849783 的回复:] [quote=引用 2 楼 cfjtaishan 的回复:] [quote=引用 1 楼 qq_38204686 的回复:] 你把fun放下面试试 为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。 楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。 个人见解,欢迎指正。[/quote] 应该是编译的问题,你运行这个程序了没有,什么结果?[/quote] 这个程序不复杂,输入两个值,得到是这两个值的和。 [/quote] 我的意思是你按照我那样做,程序是不是也能正常运行,我想看看你们的都是什么情况
自信男孩 2017-08-16
  • 打赏
  • 举报
回复
引用 6 楼 qq_31849783 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] [quote=引用 1 楼 qq_38204686 的回复:] 你把fun放下面试试 为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。 楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。 个人见解,欢迎指正。[/quote] 应该是编译的问题,你运行这个程序了没有,什么结果?[/quote] 这个程序不复杂,输入两个值,得到是这两个值的和。
canghaizui 2017-08-16
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
[quote=引用 1 楼 qq_38204686 的回复:] 你把fun放下面试试 为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。 楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。 个人见解,欢迎指正。[/quote] 应该是编译的问题,你运行这个程序了没有,什么结果?
canghaizui 2017-08-15
  • 打赏
  • 举报
回复
引用 4 楼 shetougong 的回复:
如果你之前没有进行fun函数的宏定义应该是运行不成功的,编译阶段会在内核中将每个函数编译成一个号码,在Linux下用nm命令可看到每个函数在编译时的号码。
nm操作 nm+可执行文件名(如 nm a.out)


那我还是截个图把,看着方便些



用的VS2013,就建了这两个.c文件
大米粥哥哥 2017-08-10
  • 打赏
  • 举报
回复
楼上很有道理 可能就是编译器的事 我试了一下报错 并不能运行 建议楼主贴出完整代码 大概你的编译器比较高级?
自信男孩 2017-08-10
  • 打赏
  • 举报
回复
引用 1 楼 qq_38204686 的回复:
你把fun放下面试试 为啥非得放main上面
楼主是两个源文件:b.c放func函数定义,test.c是main的定义和调用func函数。不是在一个源文件里。 楼主的这个问题,func函数本身就是定义和声明。在编译的时候应该是编译b.c在test.c前,就类似func在main函数前定义。 个人见解,欢迎指正。
Humboldt 2017-08-10
  • 打赏
  • 举报
回复
如果你之前没有进行fun函数的宏定义应该是运行不成功的,编译阶段会在内核中将每个函数编译成一个号码,在Linux下用nm命令可看到每个函数在编译时的号码。 nm操作 nm+可执行文件名(如 nm a.out)
大米粥哥哥 2017-08-09
  • 打赏
  • 举报
回复
你把fun放下面试试 为啥非得放main上面

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧