首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理argc等于0

处理argc等于0
EN

Stack Overflow用户
提问于 2015-01-18 20:32:02
回答 1查看 2.7K关注 0票数 12

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

代码语言:javascript
复制
if (!argc) {
  return 0;
}

有点傻,但我还是忍不住想知道.为什么返回0!?这并不是说我认为有一些正确的方法来处理这个问题,但是返回0 (通常与成功相关)似乎特别不合适。

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

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

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

编辑:为了使这个问题不那么含糊和哲学,我将提供一个替代方案。

代码语言:javascript
复制
if (!argc) {
  puts("Error: argc == 0");
  return 1;
}

关键是,有一个错误的指示,并返回一个非零的值。这是非常不可能的,这是必要的,但如果是,你也可以尝试指出错误。另一方面,如果检测到的错误与argc等于0一样严重,那么尝试并访问标准输出或C标准库可能是不好的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-19 00:03:11

我认为这只是防御程序设计的一个例子,因为HHVM的sorce代码中有以下代码片段(文件hphp/hhvm/main.cpp):

代码语言:javascript
复制
int main(int argc, char** argv) {
  if (!argc) {
    return 0;
  }
  HPHP::checkBuild();
  int len = strlen(argv[0]);

在队伍中:

代码语言:javascript
复制
int len = strlen(argv[0]);

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

我不熟悉HHVM,但是他们可以假设一些程序可以在没有参数的情况下调用程序(甚至连程序名都不知道)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28014522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档