是否可以访问函数返回值两次而不将其存储在变量中或再次调用该函数?

时间:2019-06-05 12:41:26

标签: 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);
}

2 个答案:

答案 0 :(得分:4)

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

在Bash中,有一个您想要的功能。此处,最新退出代码(返回值)存储在名为$?的内置全局变量中,但是C中不存在此功能,因此我也无法在类似C的语言。Bash中的类似代码段可能看起来像这样:

if ! my_command; then
    exit "$?"
fi

但是Bash是完全不同的语言。我看不出这种功能在C语言中会如何。

我将首先声明一个新变量。第二种选择也是提供,即该函数没有副作用。

  

未定义新变量

从技术上讲,这可以通过重用旧变量来实现,但这并不是一个好的解决方案。不要这样做。

您可以做的一件事是防止将来使用该变量,那就是将所有内容都放在一个范围内。这是Bathsheba在另一个答案中显示的C ++代码的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) { 

在某种程度上,这是一件好事,因为它封装了临时变量。但是另一方面,如果您确实需要此构造,则是一个很好的信号,您应该重新考虑您的设计。

答案 1 :(得分:0)

  

C中是否有一种方法可以使用函数的返回值,而无需定义新变量或调用函数两次[...]?

是,用switch

switch (id_data_valid(data)) {
    default: return 0;
    case 1: /* ... */ return 1;
    case -1: /* ... */ return -1;
    case 2: /* ... */ return 2;
    // ...
}