一个fork短码的扩展版本

原本代码:

链接

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\n", fork_(0) | fork_(1) | fork_(2));
}
  • NEW feature:
  1. 增加返回值检查
  2. 允许方便地把进程数扩展到8、16等

运行结果:

posted @ 2017-10-28 04:17  xxyyttxx  阅读(133)  评论(2编辑  收藏  举报