原本代码:
int skip = !!fork() + 2*(!!fork());
for (uint32_t i=skip;i!=INT_MAX;i+=4)
{
}
这个是多进程加速循环的代码,写的的确很精妙。(虽然for循环的条件有问题。)
但我认为还可以改进:不用两个连续的感叹号,一个就够了。没有检查返回值。
改进:
下面是我的改进版本。定义了两个函数,虽然warning连篇但是能正确运行。
warning的原因主要是用了隐式声明-Wimplicit-function-declaration
和默认类型描述符-Wimplicit-int
,只是偶尔geek一下而已,平时不会这么写的。
extern inline _Noreturn perrorNexit(const char *p)
{ perror(p), exit(-1); }
static inline fork_(register i)
{
register pid = fork();
return ~pid?!pid<<i:perrorNexit("fork_: ");
}
main() {
return printf("i'm No.%d
", fork_(0) | fork_(1) | fork_(2));
}
- NEW feature:
- 增加返回值检查
- 允许方便地把进程数扩展到8、16等