奇怪的参数声明: unsigned int str_len(s) register char *s; { register char *t; t = s; for (;;) { if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; } }
试了一下编译可以通过,也可以正常运行... 估计跟 unsigned int str_len(register char *s) { register char *t; t = s; for (;;) { if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; if (!*t) return t - s; ++t; } }
是等价的... 可是不知道为什么要来四次if (!*t) return t - s; ++t; 不知道跟一次有什么区别... —————————————————————————————————— 我的解答: 1、是老板本的C吧,在老版本C语言中,参数类型说明允许放在函数说明部分的第2行单独指定。 例如: int fun(s) int s; { ... } 2、这里写四条 if (!*t) return t - s; ++t;可能是考虑到处理器采用流水线结构。早期经典的奔腾有5级流水线结构,奔腾II有12级超流水线结构,而Pentium 4的流水线就长达20级。而经典奔腾每条整数流水线都分为四级流水,即指令预取、译码、执行、写回结果,浮点流水又分为八级流水。 (关于流水线可查看: 1)、CPU的流水线: http://www.blueidea.com/bbs/NewsDetail.asp?id=1821795) 2)、pipeline较详细说明: http://www.cs.umass.edu/~weems/CmpSci535/Discussion16.html 3)、《Starting Down the Pipeline》:http://faculty.uwb.edu/aberger/CSS422SP05/Articles/Pipelines%20part%201%20and%202.pdf 4)、The Intel Pentium 4 processor 20 stages of pipeline introduce: http://www.karbosguide.com/hardware/module3e14.htm 这里是地址的运算,所以我猜想可能是这个原因吧。
不知道是不是这样,请高手指点! |