社区
高通开发者论坛
帖子详情
C中不声明只定义的问题
zhangwenhai
2009-11-30 03:42:50
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
...全文
2521
13
打赏
收藏
C中不声明只定义的问题
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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一下。你那个返回值错误说具体点
C语言精彩编程100例
C语言精彩编程100例是一本面向C语言初学者的入门教程,旨在通过一系列精心挑选的编程实例,帮助读者逐步掌握C语言的基础知识和高级技巧。本教程涵盖了C语言的各个方面,包括基本语法、数据类型、控制结构、函数、...
C语言
中
的
声明
和
定义
C语言
中
的
声明
和
定义
引言变量的
定义
和
声明
函数的
定义
和
声明
引言 之前一直没有在意过C语言
中
的
声明
和
定义
的区别,和同事交流代码时也总是混淆这个概念,害!归根究底还是C语言基础没打好。 变量的
定义
和
声明
变量...
C语言
中
,
声明
和
定义
的区别
目录
声明
和
定义
的区别什么是
定义
什么是
声明
区别针对变量时针对函数时参考
声明
和
定义
的区别 什么是
定义
定义
就是创建一个对象,给它分配内存并取名字(变量名或对象名),还可以指定初值。另外,一个变量或对象只能...
C语言
中
函数的
声明
和
定义
函数的
声明
和
定义
不是一回事,
声明
是把函数的名字、函数类型以及形参类型、个数和顺序写清楚,以致编译成功。函数的
定义
是对函数功能的确立,...c语言
中
函数的
声明
和
定义
非常相似,导致很多人分不清这两者之间的关系。
C语言函数的
定义
和
声明
本科学C语言的时候,就...1.在C语言
中
,函数的
定义
顺序是有讲究的:默认情况下,只有后面
定义
的函数才可以调用前面
定义
过的函数 1 int sum(int a, int b) { 2 return a + b; 3 } 4 5 int main() 6 { 7 int c = ...
高通开发者论坛
4,663
社区成员
5,858
社区内容
发帖
与我相关
我的任务
高通开发者论坛
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
复制链接
扫一扫
分享
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能
物联网
机器学习
技术论坛(原bbs)
北京·东城区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章