看似毫无意义的#define函数

hft*_*hft 6 c++ windows c-preprocessor

我遇到了一些代码:

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

    //the rest of the code makes sense...
    //...
}
Run Code Online (Sandbox Code Playgroud)

我看到的一切都很有意义,除了我对RETURN_FALSE_IF_FILE_DOESNT_EXIST这一行有一点疑问

我搜索了这个字符串,然后找到#define:

#define RETURN_FALSE_IF_FILE_DOESNT_EXIST \
        if (FALSE==DoesFileExist()) return FALSE;
Run Code Online (Sandbox Code Playgroud)

我的问题是......到底是什么?有没有什么好的理由让#define像这样?为什么不写:

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

    //the rest of the code makes sense...
    //...
}
Run Code Online (Sandbox Code Playgroud)

我能想到的这样做的唯一原因是,它是一个稍微容易一点和写出来"RETURN_FALSE_IF_FILE_DOESNT_EXIST",然后写出来,"如果(FALSE == DoesFileExist())返回FALSE"更讨人喜欢.

有人看到任何其他理由这样做?这种东西有名字吗?

AnT*_*AnT 7

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

通常,当一个人具有相当全面的重复代码片段时,通常会将该代码分离为一个函数.但是,当重复的代码片段必须执行某些非正统操作时,就像return退出封闭函数一样,宏基本上是唯一的选择.(有人可能会同意这样的技巧应该保留给调试/维护/系统级代码,并且应该在应用程序级代码中避免使用.)