0

全球.h

#ifndef GLOBAL_H
#   define GLOBAL_H

#define DEBUG

#ifdef DEBUG
#   define IF_DEBUG( ... )   __VA_ARGS__
#else
#   define IF_DEBUG( ... )
#endif /* DEBUG */

#endif /* GLOBAL_H */

主文件

#include <string>
#include <iostream>
#include "Global.h"

int main() {
    int A = 1;
    int B = 2;
    int C = 0;

    IF_DEBUG(
        std::cout << "\nStep 1> Calculating...\n";
    )

    C = A + B;

    // DO WHATEVER

    IF_DEBUG(
        std::cout << "\nStep n> ...\n";
    )

    // ...

    std::cout << C << std::endl;

    // Note: I could also do some operations within the IF_DEBUG macro.
    IF_DEBUG(
        int X = 10;
        int Y = 5;
        int Z = X / Y;
        std::cout << Z << std::endl;
    )

    IF_DEBUG(
        std::cout << "\nDebugged! This program has been paused. Enter any key to continue!\n";
        ::getchar();
    )
    return 0;
}

你看到我是如何IF_DEBUG在全局头文件 (Global.h) 中定义的,以及我是如何在主源文件 (Main.cpp) 中经常使用它来进行调试的吗?这样做可以安全吗?

我问这个问题是因为我不确定这样做是否可以。当我向我的朋友展示这个时,他说这样做“不好”。因此,我不确定。

4

1 回答 1

3

这是一个非常常见和有用的技巧。但最好不要#define DEBUG在源代码中包含 。您可以改为在编译命令行中定义它。g++ -DDEBUG -c file.cpp将像DEBUG定义一样编译代码。

如果您使用的是 a Makefile,则可以将其添加到CPPFLAGS(C Preprocessor Flags) 变量中:CPPFLAGS=-DDEBUG.

如果您使用的是 IDE,请尝试在项目设置中找到 C 预处理器标志。

于 2013-03-29T00:53:45.327 回答