C中不声明只定义的问题

zhangwenhai 2009-11-30 03:42:50
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
...全文
1237 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuaweiHr2012 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangwenhai 的回复:]
引用 5 楼 ultrapro 的回复:
C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。


格式完全一样,我检测过了。 只要把这个函数在相应的头文件中 声明了,那个问题就没了。返回的值,真假都能分辨出来了。
[/Quote]

是不是 你定义的函数 和 标准库 函数重名了?如果没有在头文件中声明,且调用的.c中没有特别声明,应该有链接问题的。
如果不是上述问题,建议你重新全编译一下。
「已注销」 2011-10-25
  • 打赏
  • 举报
回复
学习了
senioryzc 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenmeimei_8899 的回复:]
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错
[/Quote]

补充下
从汇编语言或者机器指令的角度来看,函数要返回一个值,都是通过设置某个寄存器的值。然后调用函数的地方,读取这个寄存器来得到返回值。
以ARM为例,函数的返回类型为char,返回值为0,则设寄存器RO的低8位为0,高24位可能为0,也可能不为0.
调用函数处,因为你没有声明函数,所以认为RO为返回值。如果是做与0比较运算。那么即使你返回的是0(即设置RO低8为0)。但比较结果可能为真(R0高24位刚好为0),也可能为假(R0高24位刚好不为0)
adipreneo 2010-01-18
  • 打赏
  • 举报
回复
如果编译器设置合适,这种情况会至少报警,给出的提示信息就是如下所言。

[Quote=引用 8 楼 gaojinshan 的回复:]
引用 2 楼 chenmeimei_8899 的回复:
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错


同意你的说法!
[/Quote]
babiq 2010-01-12
  • 打赏
  • 举报
回复
查一下你是不是有同名函数
杭州山不高 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenmeimei_8899 的回复:]
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错
[/Quote]

同意你的说法!
bencharluo 2009-12-01
  • 打赏
  • 举报
回复
你的错误是在link的时候就出现的吧?编译的时候只会检查语法等等
路飞-总裁 2009-12-01
  • 打赏
  • 举报
回复
去C板块问下吧。。
zhangwenhai 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ultrapro 的回复:]
C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。
[/Quote]

格式完全一样,我检测过了。 只要把这个函数在相应的头文件中 声明了,那个问题就没了。返回的值,真假都能分辨出来了。
儿大不由爷 2009-12-01
  • 打赏
  • 举报
回复
C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。
zhangwenhai 2009-12-01
  • 打赏
  • 举报
回复
编译链接的时候没有错,是在程序执行的时候出的错。 函数返回BOOL值,不论真、假,结果都返回 真。

当我把这个函数在 .H文件中 进行 声明了 执行结果就正确了。
FLYUP_CHEN 2009-11-30
  • 打赏
  • 举报
回复
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错
Longinc 2009-11-30
  • 打赏
  • 举报
回复
是可以调用的。但一般会extern一下。你那个返回值错误说具体点

949

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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