LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 708|回复: 3

发现一个古怪的问题,不解

[复制链接]
发表于 2006-11-12 11:35:34 | 显示全部楼层 |阅读模式
我在看一个代码
发现在 模块文件中的 模块初始化函数(init_module)调用了 一个函数,这个 被调用的函数 是 另外一个文件中的,可古怪的是我发现竟然两个文件的关联语句,如#include" "或者extern之类,我屏蔽掉一些无关的语句,然后编译,也没有提示 那个别调函数来历不明的信息
真是奇怪啊

本人初学
是不是在模块初始化中调用的函数并不需要在文件中指明来源啊(用#include之类)

请高手赐教!!
谢谢!!
 楼主| 发表于 2006-11-12 11:42:37 | 显示全部楼层
还有
若这样子的话
我想那个被引用的函数虽然在别的文件中有定义
但是应该也不会在模块中工作了吧
回复 支持 反对

使用道具 举报

发表于 2006-11-12 14:46:04 | 显示全部楼层
Post by szzszzszz925
我在看一个代码
发现在 模块文件中的 模块初始化函数(init_module)调用了 一个函数,这个 被调用的函数 是 另外一个文件中的,可古怪的是我发现竟然两个文件的关联语句,如#include" "或者extern之类,我屏蔽掉一些无关的语句,然后编译,也没有提示 那个别调函数来历不明的信息
真是奇怪啊

本人初学
是不是在模块初始化中调用的函数并不需要在文件中指明来源啊(用#include之类)

请高手赐教!!
谢谢!!

动态库:
无论在哪个系统,动态库载入最多只分为数据段和函数符号段。
载入动态库符号的时候获得的是“地址”。
所以无非是声名这个需要调用的函数指针所对应的函数参数原形,而不需要其它关联。

应用程序:
一些版本的 gcc 编译时若没有 -Wall 等标志,
它默认是取 “函数返回值为 int, 参数及其原形为实际调用的相应值”,只在链接时才检查是否有错。
所以对于这种情况,没有关联也可以编译,但是习惯不好...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-12 17:29:44 | 显示全部楼层
谢谢楼上指点!
但是我还有一个问题
这样子在实际代码执行时会不会出错啊?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表