与DEBUG宏混淆

Confusion with DEBUG macro

本文关键字:DEBUG      更新时间:2023-10-16

test.cpp

#include <iostream>
#include "Class1.h"
#define DEBUG
int main() {
    checkAssert();
}

1.h类

#include <cassert>
#ifndef CLASS1_H_
#define CLASS1_H_
#if defined(DEBUG)
void checkAssert(){
    int number = 10;
    assert(number == 10);
}

#else
void checkAssert(){
    std::cout << "opps" << std::endl;
}
#endif /* DEBUG */
#endif /* CLASS1_H_ */

1.我已经在主文件中定义了DEBUG。

2.在Class1.h#if defined(DEBUG(中,用于检查是否定义了DEBUG(根据我的理解(。

我正在尝试这个程序来理解DEBUG宏是如何在c++中工作的,但每次我都会在屏幕上输出opp。有人能帮我了解一下发生了什么吗?

您的test.cpp在之后设置宏头文件已经包含。太晚了。您必须在之前设置宏,包括头文件:

#define DEBUG
#include <Class1.h>

预处理器执行文本替换。一旦它将class1.h粘贴到TU的文件中,您就有了(为了简洁起见,我忽略了扩展标准头(

#include <iostream>
#include <cassert>
#ifndef CLASS1_H_
#define CLASS1_H_
#if defined(DEBUG)
void checkAssert(){
    int number = 10;
    assert(number == 10);
}

#else
void checkAssert(){
    std::cout << "opps" << std::endl;
}
#endif /* DEBUG */
#endif /* CLASS1_H_ */
#define DEBUG
int main() {
    checkAssert();
}

正如您所看到的,DEBUG是在检查之后定义的。只需将其移动到相关的#include之上即可获得您想要的行为。