免费注册 查看新帖 |

Chinaunix

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

[C] 为什么C语言标准库中的字符相关函数都用int作参数与返回类型? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-24 19:10 |只看该作者 |倒序浏览
为什么C语言标准库中的字符相关函数都用int作参数与返回类型?
如:getchar、isalpha等等。不是有char类型么?

论坛徽章:
0
2 [报告]
发表于 2014-07-24 20:16 来自手机 |只看该作者
以前的cpu处理int比char快,刚好等于cpu的字长。有些用int做返回值是要返回eof作为错误值,eof在char的范围外。

论坛徽章:
0
3 [报告]
发表于 2014-07-24 20:23 |只看该作者
回复 2# Fixend


    谢谢啊!一语点醒!按你说的,我又翻了一下Pelles C的用户手册,发现宽字符类的函数中就有说明(但char类的函数里面就没有解释):

1、wint_t  Integer type that can hold all values of type wchar_t, and also the value of WEOF.  
2、WEOF Value of type wint_t, used to signal an end-of-file condition.

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
4 [报告]
发表于 2014-07-25 01:26 |只看该作者
习惯,爱好,历史遗留问题啊


在32位系统中,int也是32位,这对cpu而言比较高效,

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
5 [报告]
发表于 2014-07-25 01:31 |只看该作者
编译程序有一项优化技术,字节对齐,
就是根据cpu的位数,对变量的字节长度对齐,在32位系统中,每4字节一组
优点,cpu访问ram中变量吞吐量大了;缺点占用更多的ram

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2014-07-25 08:26 |只看该作者
shang2010 发表于 2014-07-25 01:31
编译程序有一项优化技术,字节对齐,
就是根据cpu的位数,对变量的字节长度对齐,在32位系统中,每4字节一 ...


你扯的跟问题有点远了

论坛徽章:
0
7 [报告]
发表于 2014-07-25 09:22 |只看该作者
不一定的,象strcpy,strstr之类的,返回就是char*

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
8 [报告]
发表于 2014-07-25 10:56 |只看该作者
本帖最后由 shang2010 于 2014-07-25 10:59 编辑

回复 7# sxcong


    指针,在32位系统就是int,都是主动体贴cpu的行为。

我扯内存字节对齐技术,看你技术悟性了,读书要学会融会贯通,不要死板转不过弯

论坛徽章:
0
9 [报告]
发表于 2014-07-25 11:11 |只看该作者
回复 7# sxcong


    是这样的,但我疑惑的是“字符相关函数”,strstr,strcpy都是字符串库中的函数。

论坛徽章:
0
10 [报告]
发表于 2014-07-25 11:27 |只看该作者
本帖最后由 x66x 于 2014-07-25 11:30 编辑
shang2010 发表于 2014-07-25 01:26
习惯,爱好,历史遗留问题啊


我不同意你的看法,我认为Fixend 说的是正确的。
后面你提到了内存对齐,我也去查了Pelles C的手册,然后又百度了一下,我觉得和字符相关函数采用int作为参数类型和返回值没有什么关系。
虽然我没有查到对齐是什么时候出来的,但对齐的概念应该比C语言要晚得多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP