当前位置:编程学习 > wap >>

C中不声明只定义的问题

大家好,我在 A.c 文件中定义了一个函数 B(),没有在 A.h 文件中声明,在其他文件中用这个B函数,编译的时候为什么没问题啊? 在使用的时候 返回值就不正确了,(2005环境下)。 谢谢解答 --------------------编程问答-------------------- 是可以调用的。但一般会extern一下。你那个返回值错误说具体点 --------------------编程问答-------------------- 没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错 --------------------编程问答-------------------- 你的错误是在link的时候就出现的吧?编译的时候只会检查语法等等 --------------------编程问答-------------------- 编译链接的时候没有错,是在程序执行的时候出的错。 函数返回BOOL值,不论真、假,结果都返回 真。

  当我把这个函数在 .H文件中 进行 声明了  执行结果就正确了。 --------------------编程问答-------------------- C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。 --------------------编程问答--------------------
引用 5 楼 ultrapro 的回复:
C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。


  格式完全一样,我检测过了。 只要把这个函数在相应的头文件中 声明了,那个问题就没了。返回的值,真假都能分辨出来了。 --------------------编程问答-------------------- 去C板块问下吧。。 --------------------编程问答--------------------
引用 2 楼 chenmeimei_8899 的回复:
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错


同意你的说法! --------------------编程问答-------------------- 查一下你是不是有同名函数 --------------------编程问答-------------------- 如果编译器设置合适,这种情况会至少报警,给出的提示信息就是如下所言。

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


同意你的说法!
--------------------编程问答--------------------
引用 2 楼 chenmeimei_8899 的回复:
没有出错时因为,编译的时候默认函数的返回值为int,所以当你的返回值不是int的时候就会出错


补充下
从汇编语言或者机器指令的角度来看,函数要返回一个值,都是通过设置某个寄存器的值。然后调用函数的地方,读取这个寄存器来得到返回值。
以ARM为例,函数的返回类型为char,返回值为0,则设寄存器RO的低8位为0,高24位可能为0,也可能不为0.
调用函数处,因为你没有声明函数,所以认为RO为返回值。如果是做与0比较运算。那么即使你返回的是0(即设置RO低8为0)。但比较结果可能为真(R0高24位刚好为0),也可能为假(R0高24位刚好不为0) --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
引用 6 楼 zhangwenhai 的回复:
引用 5 楼 ultrapro 的回复:
C中的标识使用时不需要声明的,不会影响编译,连接的时候会找这些东西的定义。
出现的错误可能是你用的函数的格式与你定义的不一样。


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


是不是 你定义的函数 和 标准库 函数重名了?如果没有在头文件中声明,且调用的.c中没有特别声明,应该有链接问题的。
如果不是上述问题,建议你重新全编译一下。
补充:移动开发 ,  Brew
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,