c - 我可以访问函数返回值两次而不将其存储在变量中或再次调用该函数吗?
问题描述
函数id_data_valid(data)
可能返回 0 或给定的错误代码(-1、1、-2、2、...、N)。C 中有没有一种方法可以使用函数的返回值,而无需定义新变量或调用函数两次,如下面的示例所示?
/* Store return value */
int response = id_data_valid(data);
if (response != 0) {
return response;
}
/* Double function call */
if (id_data_valid(data) != 0) {
return id_data_valid(data);
}
解决方案
不,这完全不可能。如果要使用函数的返回值两次,则必须将其存储在变量中或再次调用该函数。
在 Bash 中,有一个你想要的特性。在那里,最新$?
的退出代码(返回值)存储在一个名为这:
if ! my_command; then
exit "$?"
fi
但是 Bash 是一种完全不同的语言。我看不出这样的功能在 C 中会有多好。
我会选择声明一个新变量的第一个选项。如果该功能没有副作用,则第二个选项也很好。
不定义新变量
从技术上讲,这可以通过重用旧变量来实现,但这不是一个好的解决方案。不要这样做。
您可以做的一件事是防止将来使用该变量,就是将所有内容都放在一个范围内。这是另一个答案中显示的 C++ 代码 Bathsheba 的 C 等效项。
{ // Extra brace
int response = id_data_valid(data);
if (response != 0) {
return response;
}}
// Now response has gone out of scope, so this would be an error
if(response == 0) {
一方面,这是一件好事,因为它封装了临时变量。但另一方面,如果你真的需要这个结构,这是一个很好的迹象,你应该重新考虑你的设计。
推荐阅读
- python - 尝试获取数据的问题
- python - 输入以检查是否有人输入了低于 10 的东西,然后循环它直到他们输入高于 10 的输入,然后继续
- docker - 使用带有上下文的 Docker YML 文件到父级 (..) 在 WSL2 下构建需要太长时间
- reactjs - React:如果用户已登录,如何重定向到另一个 url?
- json - PowerBI - API 返回空 JSON
- javascript - 依赖添加项目
- google-cloud-platform - 监控 Cloud Composer 气流 UI
- amazon-web-services - AWS Route 53 连接到 S3 状态 Web 主机
- firebase - 不确定在 Flutter 或 Dart 中需要将 await 关键字应用于哪个语句
- discord - 删除广告频道上的消息