函数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);
}
答案 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;
// ...
}