首页 > 解决方案 > 我可以访问函数返回值两次而不将其存储在变量中或再次调用该函数吗?

问题描述

函数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);
}

标签: c

解决方案


不,这完全不可能。如果要使用函数的返回值两次,则必须将其存储在变量中或再次调用该函数。

在 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) { 

一方面,这是一件好事,因为它封装了临时变量。但另一方面,如果你真的需要这个结构,这是一个很好的迹象,你应该重新考虑你的设计。


推荐阅读