【发布时间】:2012-08-08 00:13:34
【问题描述】:
我正在编写一个程序,我想根据各种宏变量的值输出不同类型的调试信息(这样我就可以改变一个标志的值,然后导致写入不同级别的信息到屏幕上)。
例如,假设我有以下代码将有关我的程序的信息打印到屏幕上(称为 D1):
cout << "% Percentage complete: "
<< ceil((static_cast<double>(idx)/static_cast<double>(ITERATIONS))*(100.00))
<< "%" << endl;
cout << "x = [ x; ";
for(int i=0; i<space.getDimension(); i++)
cout << visited.vec[visited.bestIndex].x[i] << "\t";
cout << "];" << endl;
现在,还假设我有以下代码,可以在屏幕上打印有关我的程序的不同信息(称为 D2):
cout << "best = [ best; "
<< visited.vec[visited.bestIndex].meanQALY() << "];\n" << endl;
space.displayConstraintsMATLAB(idx+1);
我希望能够在我的代码中的某些位置插入诸如#D1 和#D2 之类的语句,并让宏处理器将这些语句替换为上述代码块。
我该怎么做?
(如果宏不是理想的解决方案,我很高兴听到有关不同方法的建议。)
【问题讨论】:
-
你的意思是
#define FOO,#ifdef FOO *codeblock* #endif? -
@DennisMeng 是的,就是这样。而且(但是)当我阅读我的代码时,我不想继续查看与调试相关的代码块。我宁愿只看到与调试相关的代码所在的语句。
-
嗯,你可以做一个大的
#define,但感觉不对... -
为什么不买一个带有代码折叠功能的编辑器?
-
@CarlNorum 好吧,这是一个可能的解决方案。