c – 处理argc等于0

前端之家收集整理的这篇文章主要介绍了c – 处理argc等于0前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近看到好奇心在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标准库是不好的.

解决方法

我认为这只是 Defensive programming的一个例子,因为 HHVM的sorce代码(文件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] == NULL和strlen(argv [0])将导致分段错误.

我不熟悉HHVM,但他们可以假设一些程序可以调用没有参数的程序(甚至程序名称).

猜你在找的C&C++相关文章