与DEBUG宏混淆

时间:2016-10-02 19:53:23

标签: c++ macros

TEST.CPP

#include <iostream>
#include "Class1.h"
#define DEBUG

int main() {
    checkAssert();
}

Class1.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.In Class1.h #if defined(DEBUG)用于检查是否定义了DEBUG(根据我的理解)。

我正在尝试这个程序来理解DEBUG宏如何在c ++中工作,但每次我在屏幕上都有opps输出。 任何人都可以帮助我了解正在发生的事情。

2 个答案:

答案 0 :(得分:4)

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

#define DEBUG
#include <Class1.h>

答案 1 :(得分:1)

预处理器执行文本替换。将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上方即可获得所需的行为。