2011-11-03 62 views
3

功能返回TRUE失败,返回成功。这个C代码如何处理返回码?

我看到一些这样的功能,这样做对自身的结尾:

return return_code != 0; 

return (return_code != 0); 

而在这个功能,在每个错误情况下,返回TRUE - 这是罚款以及在发生错误时应该做什么。

但是,上面的代码意味着什么?它试图确保ret​​urn_code是否为FALSE - 明确吗?

+0

它通过返回0或1来指示成功或失败。从这段代码中可以看出,这并不明显,但这可能是因为return_code可能包含比成功/失败更多的信息。做!! return_code也会这样做,我认为这看起来更好。指针的作用相同,其中!!指针返回1或0,如果指针不是或者是NULL,分别。 –

回答

2

都取决于值return_code的价值:

return_code = 0; 

return(return_code != 0); // returns false 
return(return_code == 0); // returns true 

return_code = "anything but a zero"; 

return(return_code != 0); // returns true 
return(return_code == 0); // returns false 
+0

哇,所以它确实分配?那种不对? return_code应该根据发生在函数中的事件来决定,而不是像这样明确地... – hari

+0

在函数的某个点,return_code必须被定义并赋值给它。它不是C中的'默认'变量。 –

+0

aaah ....我现在明白了。如果函数设计为在成功时返回FALSE,在失败时返回TRUE,则在每个失败条件下返回TRUE并退出。但是如果你到达'return(return_code!= 0);'这意味着,一切都很好,return_code为零。所以它会返回FALSE - 我们真正想要失败的。 - 但这一切对我来说似乎都没有必要。不知何故,我错过了这里的观点。 – hari

6

我会说是试图从所有可能的整数值折叠到01的那些。我假设函数返回一个整型;以布尔表达式评估结果强制结果仅仅是这两个值。

1

只是进一步explanaion -

这是最有可能的是,在程序的某个地方真和假的定义:

#define TRUE 1 
#define FALSE 0 

评估布尔表达式时,结果始终为1或0,1如果布尔表达式求值为true,则为0,如果为false。这就是为什么你可以测试一个布尔表达式是否为TRUE或FALSE的原因。如果你只是对布尔表达式感兴趣,并且想要更多的基本信息,这里是一个体面的tutorial

+0

感谢您的链接。 – hari

1

一个简单的例子,用一个将b和b分开的函数来说明。如果部门可以评估,否则为false

bool div(double a, double b, double& r) 
{ 
    int return_code = 1; 
    if (b == 0) // cannot divide 
     return_code = 0; 
    else 
     r = a/b; 

    return (return_code != 0); 
} 

在这个简单的例子只。如果B == 0值return_code为0,从而马克说它将返回false返回true。在任何其他情况下,它将返回true。当然,没有理由在这么简单的功能中做这样的事情。在更复杂的功能中,成功与否可以在许多地方改变,这是一种常用的做法,使用这种返回语句。