我最近看到了一些奇怪的东西。在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] == NULL
和strlen(argv[0])
将导致段错误。我对HHVM并不熟悉,但是他们只是假设某些程序可以在不带参数的情况下调用该程序(甚至没有程序名)。
关于c++ - 处理argc等于0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28014522/