社区
Qualcomm 开发者论坛
帖子详情
C中不声明只定义的问题
zhangwenhai
2009-11-30 03:42:50
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
...全文
1237
13
打赏
收藏
C中不声明只定义的问题
大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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语言
中
的
声明
和
定义
C语言
中
的
声明
和
定义
引言变量的
定义
和
声明
函数的
定义
和
声明
引言 之前一直没有在意过C语言
中
的
声明
和
定义
的区别,和同事交流代码时也总是混淆这个概念,害!归根究底还是C语言基础没打好。 变量的
定义
和
声明
变量
定义
:用于为变量分配存储空间,还可为变量指定初始值。程序
中
,变量有且仅有一个
定义
。 变量
声明
:用于向程序表明变量的类型和名字。 注:变量在使用前就要被
定义
或者
声明
。在一个程序
中
,变量只能
定义
一次,却可以
声明
多次。
定义
分配存储空间,而
声明
不会。 举例: 1.基本数据类型 int i; //
声明
,也
C语言
中
变量的
声明
和
定义
变量
声明
和变量
定义
变量
定义
:用于为变量分配存储空间,还可为变量指定初始值。程序
中
,变量有且仅有一个
定义
。变量
声明
:用于向程序表明变量的类型和名字。
定义
也是
声明
,extern
声明
不是
定义
定义
也是
声明
:当
定义
变量时我们
声明
了它的类型和名字。extern
声明
不是
定义
:通过使用extern关键字
声明
变量名而不
定义
它。 [注意] 变量在使用前就要被
定义
或者
声明
。 在一个程序
中
,变量只能
定义
一次,却可以
声明
多...
C语言函数只
定义
而不
声明
问题
C语言函数只
定义
而不
声明
问题
(2010-04-27 10:40:42) 小白实验证明,Tc3.0
中
,不写函数
声明
,只写函数
定义
也是可以的。但是: 申明-- 不开辟内存,仅仅告诉编译器,申明的部分存在,要预留一点空间。
定义
-- 开辟内存。 申明 属于 预编译范畴的。最好写在头文件
中
(楼主,自
定义
头文件学了没有啊?)(申明都写在头文件
中
,只是一种好
【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语言
中
,
声明
和
定义
的区别
目录
声明
和
定义
的区别什么是
定义
什么是
声明
区别针对变量时针对函数时参考
声明
和
定义
的区别 什么是
定义
定义
就是创建一个对象,给它分配内存并取名字(变量名或对象名),还可以指定初值。另外,一个变量或对象只能被
定义
一次,否则编译器会提示重复
定义
。 什么是
声明
用于向程序表明变量的类型和名字。告诉编译器这个名字已使用,别的地方不能再用它作为变量名或对象名。另外,
声明
可以出现多次。 区别 对象分配了内存,声...
Qualcomm 开发者论坛
949
社区成员
5,227
社区内容
发帖
与我相关
我的任务
Qualcomm 开发者论坛
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
复制链接
扫一扫
分享
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能
物联网
机器学习
企业社区
北京·东城区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章