如果以是否返回值、或者返回什么值作为判断的唯一标准,有些牵强;
除了通过返回值来判断是否执行成功,那还有第二种方法吗?难道读取程序的输出?
强制返回0就不叫漏洞,不返回0就叫漏洞,一个函数的返回值有这么大功效?
你理解错了吧,正确的逻辑是 执行成功就应该返回0,执行失败就应该返回非零。
如果不给出正确的返回值,调用者就没法知道程序是否执行成功。
我不知道有些现象怎么解释,比如gcc和g++,int main(void)时,没有return 0时gcc出警告(-Wall情况下),但g++表示正常;是否表明C编译器和c++编译器长期以来一直执行着不一样的标准,即使出现问题也不能一概而论?
不可能的,除非你用的是C99之前的C标准。
在C99之前,没有规定会自动return 0;,那么不写return自然要给出警告。
在古老的C/C++标准中:
int main(void) 和 main(void) 等价;
main函数的任何退出分支必须显式写上 return xxx。
在当今的C/C++标准中:
main(void) 不再合法;
main函数的任何退出分支,若没有显式写上 return xxx,则隐式的 return 0;