c++ - 如何检查/检测不带花括号的 'if' 子句?

标签 c++

在 C/C++ 代码项目中,我想找到所有不使用大括号的 if/else 句子。是否有任何编译器检查或实用程序可以找到它们?

主要问题是我想重新定义一些调试宏以避免在某些情况下进行跟踪评估(有人知道其他解决方案吗?)。我需要找到它们以避免 “dangling-else problem” ,如 "if" block without curly braces makes subsequent "else if" nested 中指出的

代码片段:

修改前:

DEBUG GET_DEBUG_DST(DEBUG_LEVEL_DEBUG).nospace() << DEBUG_PREFIX << __PRETTY_FUNCTION__

现在我们将使用内部不带大括号的if:

DEBUG if (getDebugmode(DEBUG_LEVEL_DEBUG)) GET_DEBUG_DST(DEBUG_LEVEL_DEBUG).nospace() << DEBUG_PREFIX << __PRETTY_FUNCTION__

有问题的代码示例:

if (my condition)
    DEBUG << "hi there";
else
    {some more code;}

最佳答案

只需反转逻辑,将事件部分放在 else 中 分支:

#define DEBUG if( !getDebugmode( DEBUG_LEVEL_DEBUG ) )              \
        ;                                                           \
    else                                                            \
        GET_DEBUG_DST( DEBUG_LEVEL_DEBUG ).nospace()                \
            << DEBUG_PREFIX << __PRETTY_FUNCTION__

由于 if 有一个匹配的 else,因此无法拾取 任何其他其他

关于c++ - 如何检查/检测不带花括号的 'if' 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831517/

相关文章:

C++ std::chrono 在它自己的例子中给出了错误的输出

c++ - 创建蒙版以选择黑色区域

c++ - 试图指向链表中的前一个节点

c++ - 如何在从原始图像中提取的子图像中执行模板匹配过程并在原始图像中显示结果

c++ - SDL_image 超出范围

c++ - 使用强制转换运算符和单参数构造函数重载类的运算符

第二个派生类中的 C++ 初始化列表

c++ - Eclipse CDT 中的 "Open Implementation"

c++ - 如何在 Windows 上的 Release模式下避免 "program.exe has stopped working"窗口?

c++ - 如何找到大矩阵的行列式