【发布时间】:2015-03-16 20:41:10
【问题描述】:
我最近看到了一些奇怪的东西。在 HHVM 源代码中,main() 函数的前 3 行如下所示:
if (!argc) {
return 0;
}
这有点傻,但我还是忍不住想……为什么要返回 0!? 并不是我认为有一些正确的方法可以处理这个问题,而是返回 0,通常与成功联系在一起,似乎特别不合适。
除了不会崩溃之外,是否有曾经有对argc 为0 的适当响应的情况? (或者甚至小于 0?)这有关系吗?
我知道在 argc 为 0 的情况下结束的唯一方法是 exec() 和朋友。如果出于某种原因确实发生了这种情况,那几乎可以肯定是调用者中的一个错误,而被调用者对此无能为力。
(标记为 C 和 C++,因为我希望这两种语言的答案是相同的)
编辑:为了尽量减少问题的模糊性和哲学性,我将提供一个替代方案。
if (!argc) {
puts("Error: argc == 0");
return 1;
}
关键点是有错误指示并返回非零值。极不可能需要这样做,但如果是这样,您不妨尝试指出错误。另一方面,如果检测到的错误严重到argc 等于 0,那么尝试访问 stdout 或 C 标准库可能是有原因的。
【问题讨论】:
-
argc按照标准必须是非负数。 -
好吧,为什么不呢。它被要求什么都不做,它成功地什么都不做。
-
@HansPassant 是什么让你说它被要求什么都不做?当它被问到一个荒谬的问题时,我感到很震惊。
-
@Columbo
0是非负数 -
@MattMcNabb ...你读过这个问题吗?我指的是“(甚至小于 0?)”。