gpt4 book ai didi

c++ - 如何使用宏在 C++ 中嵌入调试语句

转载 作者:行者123 更新时间:2023-11-28 03:33:24 24 4
gpt4 key购买 nike

我正在写一个程序,我想根据各种宏变量的值输出不同类型的调试信息(这样我就可以改变一个标志的值,然后导致写入不同级别的信息到屏幕上)。

例如,假设我有以下代码将有关我的程序的信息打印到屏幕上(称之为 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 之类的语句,并让宏处理器用上面的语句替换这些语句代码块。

我该怎么做?

(如果宏不是理想的解决方案,我很高兴听到有关不同方法的建议。)

最佳答案

在我看来,您正在寻找的是一个日志记录工具。查看此线程的 some suggestions .

为什么要使用整个框架而不是宏?

问题是正确记录日志比看起来要困难得多。还有线程问题, session ,类和对象实例是你必须要考虑的因素。日志文件缓冲、翻转和压缩日志文件也是您必须考虑的问题。您可能还想通过网络或系统日志(或两者)登录,或登录到数据库中。自己正确实现所有这些需要大量工作。

宏有用吗?

当然!在我们的项目中,我们定义了一个名为 LOG 的宏,它包装了对我们的日志框架的调用(我们正在使用 log4cpp )。如果有一天我们打算转移到另一个框架,我们只需要在一个地方重新定义我们的 LOG 宏,而不是梳理整个代码库。这是可行的,因为大多数日志记录框架共享一个相似的接口(interface),通常由日志级别和消息字符串组成。

关于c++ - 如何使用宏在 C++ 中嵌入调试语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com