return语句中可以省略return关键字
Can return keyword be omitted in a return statement?
我最近在这个ApacheAxis教程示例中看到了下面的一段代码。
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关键字的return语句吗?
我尝试了下面的一段代码来在Visual Studio中对此进行测试
int main()
{
0; // in the second run, replaced 0 with 28
}
两个项目都顺利运行。但echo %ERRORLEVEL%
windows命令行返回了0。
但是下面的代码
int add()
{
0;
}
导致
错误1错误C4716:"add":必须返回值
我知道返回值0
是为main()
隐式添加的
我在包含return关键字方面没有任何问题,但我是将Axis2/C库移植到C++项目中。还有很多例子在那里我遇到了0;
为什么上面的语法会导致这种未定义的行为?
在C++中,只能在main()
、返回void
的函数以及构造函数和析构函数中省略return
。在前一种情况下,main()
自动返回0
。在您的例子中,语句0;
是一个语法正确的语句,被评估为no-op,所以编译器基本上忽略了它。
您在哪里找到代码的?它似乎已损坏,可能是由于在网页上显示它的格式或其他原因。。。?
原始代码(来自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;
}
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- C++函数中的精确"return"矩
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 方法错误"not all control paths return a value"和方法不返回值
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- return语句中可以省略return关键字
- 关键字之后"return"语句会被执行吗?