我最近看到了一些奇怪的东西。在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一样严重,那么尝试并访问标准输出或C标准库可能是不好的原因。
发布于 2015-01-19 00:03:11
我认为这只是防御程序设计的一个例子,因为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,但是他们可以假设一些程序可以在没有参数的情况下调用程序(甚至连程序名都不知道)。
https://stackoverflow.com/questions/28014522
复制相似问题