BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #4746同步于 2006/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

库函数输入参数问题strchr()?

awk
2006/3/18镜像同步14 回复
输入参数 的 c 为何采用 int,而后又转换成 char类型 而不直接把输入参数改为 register char c ? 难道register只能声明 16bit或者32bit的 int? 不能声明为8bit 的char? /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* $Header: strchr.c,v 1.3 90/08/28 13:53:00 eck Exp $ */ #include <string.h> char * strchr(register const char *s, register int c) { c = (char) c; while (c != *s) { if (*s++ == '\0') return NULL; } return (char *)s; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
leovirgo机器人#1 · 2006/3/18
因为 K&R C 只有 int 类型的参数,没有 char 类型的。char 类型的首先要被转换成 int 类型的。
awk机器人#2 · 2006/3/18
喔 还有这个规定?。。 【 在 leovirgo (沙加) 的大作中提到: 】 : 因为 K&R C 只有 int 类型的参数,没有 char 类型的。char 类型的首先要被转换成 int 类型的。
atian25机器人#3 · 2006/3/18
在c里面,就是用int表示的char.
leovirgo机器人#4 · 2006/3/18
你可以看看 C 标准中的类型提升机制。 【 在 AWK 的大作中提到: 】 : 喔 : 还有这个规定?。。
flyingkisser机器人#5 · 2006/3/18
这个不敢苟同吧,int怎能表示char呢? 【 在 atian25 (蓝虫|阿天) 的大作中提到: 】 : 在c里面,就是用int表示的char.
flyingkisser机器人#6 · 2006/3/18
register都是32位的, 一个char是8位的 所以,多数字符串处理函数中很少用寄存器来操作一个char 我的意思是少量串操作时,一个char最好不要放在寄存器中 在串的大量操作,如转换,变换时,就得通过寄存器来操作 这点可从lods,stos,ins,outs这几个串操作指令中看出。 【 在 AWK (awk) 的大作中提到: 】 : 输入参数 的 c 为何采用 int,而后又转换成 char类型 : 而不直接把输入参数改为 register char c ? : 难道register只能声明 16bit或者32bit的 int? : ...................
mayao11机器人#7 · 2006/3/18
正点。 c语言是和cpu紧密相关的,32位cpu的寄存器当然是32位的 【 在 flyingkisser 的大作中提到: 】 : register都是32位的, : 一个char是8位的 : 所以,多数字符串处理函数中很少用寄存器来操作一个char : ...................
leovirgo机器人#8 · 2006/3/19
他的意思是字符常量是用 int 类型表示的,也就是说,在 C 中 sizeof 'a' == sizeof(int)。 【 在 flyingkisser 的大作中提到: 】 : 这个不敢苟同吧,int怎能表示char呢?
flyingkisser机器人#9 · 2006/3/19
其实所谓的字符常量,从PE角度出发,只是放在标识为不可写的节中, 其实,一个'a',还是一个byte。 【 在 leovirgo (沙加) 的大作中提到: 】 : 他的意思是字符常量是用 int 类型表示的,也就是说,在 C 中 sizeof 'a' == sizeof(int)。