c++ - 看似毫无意义的#define of function

标签 c++ windows c-preprocessor

我遇到过一些代码:

BOOL CBlahClass::SomeFunction(DWORD *pdw)
{
    RETURN_FALSE_IF_FILE_DOESNT_EXIST

    //the rest of the code makes sense...
    //...
}

除了我对这条线有一点疑问外,我看到的一切都很有道理 RETURN_FALSE_IF_FILE_DOESNT_EXIST

我搜索了这个字符串并找到了#define:

#define RETURN_FALSE_IF_FILE_DOESNT_EXIST \
        if (FALSE==DoesFileExist()) return FALSE;

我的问题是……到底是什么?像这样制作#define 有什么充分的理由吗?为什么不写:

BOOL CBlahClass::SomeFunction(DWORD *pdw)
{
    if ( FALSE == DoesFileExist() ) return FALSE

    //the rest of the code makes sense...
    //...
}

我能想到这样做的唯一原因是写出“RETURN_FALSE_IF_FILE_DOESNT_EXIST”比写出“如果 (FALSE==DoesFileExist()) 返回 FALSE”。

有人看到这样做的任何其他原因吗?这种东西有名字吗?

最佳答案

好吧,使用宏背后的想法是在特定检查可能发生变化的情况下简化维护。当你有一个宏时,你只需更改宏定义,而不是遍历整个程序并单独更改每个检查。此外,它还让您有机会通过更改宏定义来完全消除此检查。

一般来说,当一个人有一段相当全面的重复代码时,通常会将该代码分成一个函数。然而,当那段重复的代码必须执行一些非正统的操作时,比如退出封闭函数的 return,宏基本上是唯一的选择。 (人们可能会同意这样的技巧应该保留给调试/维护/系统级代码,并且应该避免在应用程序级代码中使用。)

关于c++ - 看似毫无意义的#define of function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23705266/

相关文章:

c++ - 使用 boost::mpl::bitor_

c++ - 使用 strcmp 比较两个字符串的问题

windows - 部署 Datasnap 服务

c - C中#if 1的意义是什么

c++ - C++中的变量到底是什么?

c++ - 检测数组外访问冲突

windows - 当标签位于内部时,for 命令仅对第一个值执行

c - 如何动态加载每个需要的函数

c - 如何在 C 中打印定义的字符串宏?

c-preprocessor - C 预处理器可以执行整数运算吗?