一个c小问题(菜鸟提问)

qingshuihepan 2010-05-28 09:03:53
我水平很菜,提问的估计也很搞笑,呵呵,高手见谅。

我在代码里面添加了一个.c文件A,里面有一个函数f,然后我在另外一个.c文件B中调用此函数f,但是,B文件中并没有包含对函数f的声明,也就是说没有包含文件A的.h,对函数f也没用做extern的声明。

问题是B文件对A文件中的函数f调用居然没有问题?

不懂啊,跟高手学习
...全文
130 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-05-28
  • 打赏
  • 举报
回复
不要迷信老师、帖子、考题;
要迷信CPU、编译器、调试器。
innexy_sun 2010-05-28
  • 打赏
  • 举报
回复
编译是没有问题的 问题主要在连接上。如果A在B之前就可以找到函数f,否则应该找不到。就好像同一文件中
void f()
{b();}
void b()
{}
直接这样写会报错的
wzywsk 2010-05-28
  • 打赏
  • 举报
回复
编译器!!编译器~~
chistopher 2010-05-28
  • 打赏
  • 举报
回复
编译器支持
老马何以识途 2010-05-28
  • 打赏
  • 举报
回复
gcc,用Makefile应该是可以的,只需要指定源文件有A.c和B.c
周靖峰 2010-05-28
  • 打赏
  • 举报
回复
貌似现在的编译器不写extern也没事了
lylm 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qingshuihepan 的回复:]
引用 1 楼 freezezdj 的回复:
C编译器根据你调用函数的参数类型和返回值,
给你默认的添加了一个函数声明,当然不一定准确,存在安全隐患。
所以还是自己声明一个好。

C++就不可以。


这么说,应该再学学编译原理吧?初学啊,摸索中,望指点一二啊,不甚感激
晕,刚引用错了
[/Quote]
这个其实和编译原理关系倒不大,就是编译器实际上会隐式的做一些工作,只不过我们不清楚罢了
我们还是应该规范的写代码,这样程序的健壮性、可读性会比较好
qingshuihepan 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 freezezdj 的回复:]
C编译器根据你调用函数的参数类型和返回值,
给你默认的添加了一个函数声明,当然不一定准确,存在安全隐患。
所以还是自己声明一个好。

C++就不可以。
[/Quote]

这么说,应该再学学编译原理吧?初学啊,摸索中,望指点一二啊,不甚感激
晕,刚引用错了
qingshuihepan 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 qingshuihepan 的回复:]
我水平很菜,提问的估计也很搞笑,呵呵,高手见谅。

我在代码里面添加了一个.c文件A,里面有一个函数f,然后我在另外一个.c文件B中调用此函数f,但是,B文件中并没有包含对函数f的声明,也就是说没有包含文件A的.h,对函数f也没用做extern的声明。

问题是B文件对A文件中的函数f调用居然没有问题?

不懂啊,跟高手学习
[/Quote]

这么说,应该再学学编译原理吧?初学啊,摸索中,望指点一二啊,不甚感激
老马何以识途 2010-05-28
  • 打赏
  • 举报
回复
编译器支持
Mg 2010-05-28
  • 打赏
  • 举报
回复
也许你包含了其他的文件~你写个测试程序,简单的测下就知道咯·
冻结 2010-05-28
  • 打赏
  • 举报
回复
C编译器根据你调用函数的参数类型和返回值,
给你默认的添加了一个函数声明,当然不一定准确,存在安全隐患。
所以还是自己声明一个好。

C++就不可以。

69,369

社区成员

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

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