我正在查看https://github.com/iputils/iputils/blob/s20161105/ping.c,并从608行到713行发现:
if (source.sin_addr.s_addr == 0) {
... // Omitted
} while(0);
两个问题:
它如何编译
在if语句后添加
while (0)
的价值是什么
ping.h
包含了一些#includes
、结构定义和inline static
函数的混合体。此外,Github上的代码永远不会编译。存在许多问题,包括代码中对print_timestamp();
的调用,但原型是:extern void print_timestamp(struct ping_rts *rts);
请注意:此原型在代码中出现了4次。建议要么计划大量修复代码,要么寻找另一个项目。 - user3629249do{...}while(0)
实现,以便像函数一样使用而不会立即导致行终止。另一个理论是它是一个混淆金丝雀:这些是弱(通常是无用的)习惯用语,偶尔散布在周围,可以帮助确定是否有人窃取了开源实现(也就是违反了代码的 OSS 许可证)。 - jhill515