gpt4 book ai didi

c++ - 您是否应该依赖 IF 语句将除 0 以外的任何其他整数值捕获为真?

转载 作者:行者123 更新时间:2023-11-30 00:53:41 25 4
gpt4 key购买 nike

我正在用 Visual C++ 编写一个相当大的项目,我想知道是否有一种方法可以清理当前看起来像这样的错误检查代码:

// A header full of error codes like this
#define NO_ERROR 0x0000
#define CASUAL_ERROR 0x0001
#define ERROR_IN_THE_MATRIX 0x0015

-

// An example source file
int error;
error = openGLObj->Initialize();
if (!(error == NO_ERROR)
return error;

如您所见,当您几乎在每次函数调用后都必须编写一个错误检查代码时,它会占用大量屏幕空间。

所以我尝试了这样的事情:

// Second example source file
int error;
error = fbxParser->ParseVertexData(...);
if (error)
return error;

它似乎至少在 Visual C++ 中有效,因为如果没有错误并且任何其他整数似乎将 bool 值设置为真,我总是返回 NO_ERROR (int 0)。

后者是正确的做事方式吗?还是我以后会遇到问题,不得不(再次)花费数小时来转换我的 if 语句?

最佳答案

这在很大程度上取决于风格和个人喜好。

我个人不喜欢将可以具有多个有意义的非零值的表达式视为条件。例如,我会写:

如果(指针!= NULL)

而不是

如果(!ptr)

尽管两者的意思完全相同。相反,如果表达式“逻辑上”的 bool 值(无论它是否属于bool 类型),我更愿意直接将它用作条件:

if (isdigit(foo))

而不是

if (isdigit(foo) != 0)

和:

bool cond;
// ...
if (cond)
// or
if (!cond)

而且不是

if (cond == true)
if (cond == false)

所以在你的情况下,我会写:

if (error != NO_ERROR)
return error;

(请注意,我使用的是 != 运算符,而不是将 ! 应用于 == 运算符的结果)。

显式比较为读者提供了更多上下文来理解什么是error;您将它与 NO_ERROR 进行比较,而不是与 00.0NULL 进行比较'\0'.

如果 error 是一个纯 bool 值,我会写成 if (error)

正如我所说,这是个人喜好问题。根据您的定义,这:

if (error)

完全等同于:

if (error != NO_ERROR)

您可以相信它会按预期工作。 if 语句中的条件被隐式转换为 bool,这本质上等同于将其与 0 进行不等式比较。

因此您不必担心 if (error) 没有按您预期的方式运行。使用现代编译器,您也不必担心编译器会为这两种形式生成效率较低的代码。使用您认为更具可读性的任何内容。 (不可写;请记住,代码将被读取的次数比写入的次数多得多。)

关于c++ - 您是否应该依赖 IF 语句将除 0 以外的任何其他整数值捕获为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15665956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com