社区
高通开发者论坛
帖子详情
C中不声明只定义的问题
zhangwenhai
2009-11-30 03:42:50
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
...全文
2510
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语言入门教程:主要针对C语言初学者,从零讲解各个细节。
【C语言-函数的
声明
与
定义
】
[转载] 深入浅出,给初学者的难得的haowenz 一、函数的
声明
1.在C语言
中
,函数的
定义
顺序是有讲究的:默认情况下,只有后面
定义
的函数才可以调用前面
定义
过的函数 1 int sum(int a, int b) { 2 return a + b; 3 } 4 5 int main() 6 { 7 int c = sum(1, 4); 8 return 0; 9 } 第5行
定义
的main函数调用了第1行的sum函数,这是合法的。如果调换sum函数和main函数的顺序,在
C语言函数的
定义
和
声明
本科学C语言的时候,就对函数的
定义
和
声明
的作用很迷糊,刚看到一篇博客,写得非常清楚,贴出来与各位共享! 一、函数的
声明
1.在C语言
中
,函数的
定义
顺序是有讲究的:默认情况下,只有后面
定义
的函数才可以调用前面
定义
过的函数 1 int sum(int a, int b) { 2 return a + b; 3 } 4 5 int main() 6 { 7 int c = ...
C语言
中
声明
和
定义
的区别
对于第一行代码,编译器不会为它在栈
中
分配一点东西(内存),直到第三句,a=2;当然,并不一定编译器就会样做,也有可能在
声明
int a时,编译器就会把一个废值入栈,到第三条再为其赋值,具体看编译器。所以,
声明
不一定不是
定义
,而
定义
一定是
定义
。:是告诉编译器有一个变量、函数或类型存在,但不为其分配内存或提供具体的实现。从编译原理上来说,
声明
是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。
声明
:是为了告诉编译器标识符的类型和名称,它们不会分配内存或提供具体的实现。
C语言
中
声明
和
定义
详解
https://blog.csdn.net/gatieme/article/details/50640424 变量
声明
和变量
定义
变量
定义
:用于为变量分配存储空间,还可为变量指定初始值。程序
中
,变量有且仅有一个
定义
。 变量
声明
:用于向程序表明变量的类型和名字。
定义
也是
声明
,extern
声明
不是
定义
定义
也是
声明
:当
定义
变量时我们
声明
了它的类型和名字。 exte...
高通开发者论坛
3,194
社区成员
5,792
社区内容
发帖
与我相关
我的任务
高通开发者论坛
本论坛以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写文章