我最近看到了一些奇怪的东西。在HHVM源代码中,main()函数的前三行内容如下:

if (!argc) {
  return 0;
}

这有点愚蠢,但是我还是不禁要问...为什么要返回0!我并不是说有某种正确的方法可以解决此问题,但是返回0(通常与成功相关)似乎特别不合适。

除了不崩溃,是否曾经有过对argc为0的适当响应? (甚至小于0?)有关系吗?

我知道在argc为0的情况下结束的唯一方法是与exec()和 friend 。如果确实由于某种原因发生了,那几乎可以肯定是调用者中的一个错误,被调用者对此无能为力。

(标记为C和C++,因为我希望两种语言的答案是相同的)

编辑:为了尝试使这个问题变得不那么模糊和哲学,我将提供一个替代方法。
if (!argc) {
  puts("Error: argc == 0");
  return 1;
}

关键点是有错误指示,并且返回非零值。这是极不可能的,但是如果是这样,您最好尝试指出该错误。另一方面,如果检测到的错误的严重程度等于argc等于0,则可能是由于尝试访问stdout或C标准库而导致的错误。

最佳答案

我认为这只是Defensive programming的一种情况,这是由于HHVM的存储代码(文件hphp/hhvm/main.cpp)中的以下代码段:

int main(int argc, char** argv) {
  if (!argc) {
    return 0;
  }
  HPHP::checkBuild();
  int len = strlen(argv[0]);

在该行中:
int len = strlen(argv[0]);

如果argc == 0-> argv[0] == NULLstrlen(argv[0])将导致段错误。

我对HHVM并不熟悉,但是他们只是假设某些程序可以在不带参数的情况下调用该程序(甚至没有程序名)。

关于c++ - 处理argc等于0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28014522/

10-12 14:51