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输出。 任何人都可以帮助我了解正在发生的事情。
答案 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
上方即可获得所需的行为。