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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...