大家来看看,奇怪的问题!

jungwen 2007-12-26 06:44:48
VC中的C++工程,共包含3个文件:TestVar.c/func.c/func.h,内容如下:
TestVar.c
//////////////////////////////////
int main(int argc, char* argv[])
{
char value = 0;

if (funcTest())
{
return 1;
}
else
{
return 0;
}
}

func.c
////////////////////////////////
#include "func.h"

char funcTest()
{
char var = 0;

return var;
}

func.h
/////////////////////
extern char funcTest();


问题:这个时候main函数执行的应该是return 0;但大家调试看看,执行的却是return 1;为什么呢?谁能告诉我,谢谢!

NOTE:
1.TestVar.c中没有include "func.h",如果include了,则main执行的是return 0; 如果没有include,则入问题所示;
2.函数返回的是char类型,如果程序中所有char都换成int,则main执行的也是return 0;与是否include "func.h"没有关系;
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
visame 2007-12-27
  • 打赏
  • 举报
回复
你的TestVar.c 里面什么头文件也没有包含吗?那funcTest()哪里来???
int main(int argc, char* argv[])
{
char value = 0;

if (funcTest())
{
return 1;
}
else
{
return 0;
}
}
jungwen 2007-12-27
  • 打赏
  • 举报
回复
C编译默认是public类型的函数,所以不用包含头文件!

我昨天研究了一下汇编语言,问题已经解决


如果不包含头文件,if中函数的返回值类型不确定,if当作dword来进行比较,结果cccccc00和00000000进行比较,产生了异常
如果包含头文件,If中函数的返回值确定,即为CHAR, if比较时,是两个dword 且值都为0的来进行比较,没有问题!!
大家可以试试
ghostjeky 2007-12-26
  • 打赏
  • 举报
回复
funcTest() 返回的是字符0
但在if里用的是字符0的ASCII值,而在if里非0就是真。
至于1.TestVar.c中没有include "func.h",如果include了,则main执行的是return 0;也不知道怎么解释
~_~ 菜鸟理解。
jungwen 2007-12-26
  • 打赏
  • 举报
回复
为什么会这样?为什么include了就好了,如NOTE 1中的.
baihacker 2007-12-26
  • 打赏
  • 举报
回复
返回0表示正常返回...
返回非0是异常...

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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