免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 7357 | 回复: 38
打印 上一主题 下一主题

[C] 代码的输出问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-14 18:32 |只看该作者 |倒序浏览
char low(char in)
{
        char b;
        if(in>='a'&&in<='z')
        {
                b = in -'a' + 'A';
        }
        else
        {
                return in;
        }
}

void main()
{
printf("%c",low('e'));
}
在gcc和vc环境下输出不一样,在gcc下输出P,在vc下输出d;
请高人指点一下并分析一下原因,不胜感激,谢谢!

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
2 [报告]
发表于 2008-10-14 18:44 |只看该作者
printf("%c",low('e'));
你试着把这一句改成
printf("%c",'e'); 看看

low返回的是int 的吧?
我猜的,我自己没环境,没办法试验

论坛徽章:
0
3 [报告]
发表于 2008-10-14 18:49 |只看该作者

回复 #2 egmkang 的帖子

如果是printf("%c",'e');肯定输出e了。现在的问题是如果没有return的话,函数的返回值是什么?

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
4 [报告]
发表于 2008-10-14 18:52 |只看该作者
哈哈.这么一个问题,才看见你的函数写得是不正常的.

这个估计得看printf函数怎么实现了吧?
这个函数的参数数目是可变的,估计没有返回值就是直接随便弄一个值塞进去了.你多试几次看看值有没有变化??

论坛徽章:
0
5 [报告]
发表于 2008-10-14 18:55 |只看该作者
if(in>='a'&&in<='z')
        {
                b = in -'a' + 'A';
        }

这种情况没有return啊

论坛徽章:
0
6 [报告]
发表于 2008-10-14 18:55 |只看该作者

回复 #4 egmkang 的帖子

谢谢,你的建议!
在一个环境下的输出从来没有发生变化过,唉,搞不懂,请高人指点啊!

论坛徽章:
0
7 [报告]
发表于 2008-10-14 18:58 |只看该作者

回复 #5 5毛党党员 的帖子

我估计得看看函数栈的东西了,我不是很明白函数的返回地址是什么地方不是很明白?

论坛徽章:
0
8 [报告]
发表于 2008-10-14 19:16 |只看该作者
If the } that terminates a function is reached, and the value of the function call is used by
the caller, the behavior is undefined.


这种标准未定义的东西,深究无用

论坛徽章:
0
9 [报告]
发表于 2008-10-14 19:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2008-10-14 19:17 |只看该作者
原帖由 jelly2172000 于 2008-10-14 18:58 发表
我估计得看看函数栈的东西了,我不是很明白函数的返回地址是什么地方不是很明白?

if(in>='a'&&in<='z')
        {
                b = in -'a' + 'A';
                return b;
        }

这样不就可以了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP