我最近在Apache Axis tutorial example.
中遇到了以下代码int main()
{
int status = AXIS2_SUCCESS;
axutil_env_t *env = NULL;
axutil_allocator_t *allocator = NULL;
env = create_environment();
status = build_and_serialize_om(env);
(status == AXIS2_FAILURE)
{
printf(" build AXIOM failed");
}
axutil_env_free(env);
0;
}
我不明白的是最后的0;
是没有return关键字的返回语句吗?
我尝试使用下面的代码在Visual Studio中测试它。
int main()
{
0; // in the second run, replaced 0 with 28
}
两个程序都运行没有任何问题。但是echo %ERRORLEVEL%
at
windows命令行为两者返回0。
但下面的代码
int add()
{
0;
}
原因
错误1错误C4716:'add':必须返回值
我了解0
隐含添加了返回值main()
。
我没有问题,包括return关键字,但我是
将Axis2 / C库移植到C ++项目。而且有很多例子
我在哪里遇到0;
为什么上述语法会导致此未定义的行为?
答案 0 :(得分:9)
在C ++中return
可以在main()
中,在void
返回的函数中以及在构造函数和析构函数中省略 。在前一种情况下,main()
会自动返回0
。在您的情况下,语句0;
是一个语法正确的语句,被评估为无操作,因此编译器基本上忽略它。
答案 1 :(得分:2)
您在哪里找到该代码?它似乎已被破坏,可能是由于格式化在网页上显示它或某些东西......?
原始代码(来自https://github.com/bnoordhuis/axis2-c/blob/master/axiom/test/util/axiom_util_test.c)是:
int main()
{
int status = AXIS2_SUCCESS;
axutil_env_t *env = NULL;
status = build_and_serialize_om(env);
if(status == AXIS2_FAILURE)
{
printf(" build AXIOM failed");
}
axutil_env_free(env);
return 0;
}