返回信息流输入参数 的 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;
}
这是一条镜像帖。来源:北邮人论坛 / soft-design / #4746同步于 2006/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
库函数输入参数问题strchr()?
awk
2006/3/18镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
喔
还有这个规定?。。
【 在 leovirgo (沙加) 的大作中提到: 】
: 因为 K&R C 只有 int 类型的参数,没有 char 类型的。char 类型的首先要被转换成 int 类型的。
这个不敢苟同吧,int怎能表示char呢?
【 在 atian25 (蓝虫|阿天) 的大作中提到: 】
: 在c里面,就是用int表示的char.
register都是32位的,
一个char是8位的
所以,多数字符串处理函数中很少用寄存器来操作一个char
我的意思是少量串操作时,一个char最好不要放在寄存器中
在串的大量操作,如转换,变换时,就得通过寄存器来操作
这点可从lods,stos,ins,outs这几个串操作指令中看出。
【 在 AWK (awk) 的大作中提到: 】
: 输入参数 的 c 为何采用 int,而后又转换成 char类型
: 而不直接把输入参数改为 register char c ?
: 难道register只能声明 16bit或者32bit的 int?
: ...................
正点。
c语言是和cpu紧密相关的,32位cpu的寄存器当然是32位的
【 在 flyingkisser 的大作中提到: 】
: register都是32位的,
: 一个char是8位的
: 所以,多数字符串处理函数中很少用寄存器来操作一个char
: ...................
他的意思是字符常量是用 int 类型表示的,也就是说,在 C 中 sizeof 'a' == sizeof(int)。
【 在 flyingkisser 的大作中提到: 】
: 这个不敢苟同吧,int怎能表示char呢?
其实所谓的字符常量,从PE角度出发,只是放在标识为不可写的节中,
其实,一个'a',还是一个byte。
【 在 leovirgo (沙加) 的大作中提到: 】
: 他的意思是字符常量是用 int 类型表示的,也就是说,在 C 中 sizeof 'a' == sizeof(int)。