使用 C++ 中的参数(级联宏)来观察和评估代码片段的有效方法

问题描述 投票:0回答:1

我在 Visual Studio IDE 中工作。我继承了一些 C++ 代码,其中定义了很多宏:就像级联宏引用了一些其他替换,再次引用了一些其他替换,请参见下文。

我来自 Matlab 环境,所以我非常沮丧,如果我想观察 Autos/Locals 中这些变量的值,我必须沿着级联走下去,并将实际的预处理标识符/字符串粘贴到观察窗口中。另外,我无法将实际的 C++ 代码粘贴到立即窗口中,因为如果不首先由预处理器替换它们,它就无法处理这些标识符。

当您想在立即窗口中粘贴内容时,是否有任何附加组件可以为您完成所有级联/预处理,其中这些标识符是更复杂语句的一部分,而您只想将其粘贴并获取结果?

或者还有其他解决方案吗? 我在 C++ 方面没有经验,但我的疯狂猜测是这不可能是真正好的编程方式,因为进一步开发代码或理解它非常困难。重写我的这个程序几乎是不可能的,但如果你知道可以进行任何改进,你可以让我知道。

一些例子:

The code: if ((_f_NUMERO_TT == 97) || (_f_NUMERO_TT == JFP_23) || (_f_NUMERO_TT == YSTAR)) {

_f_NUMERO_TT == 97

F12 会引导您找到以 #ifndef FILES_HEADER 开头的文件中的这些片段:

#define _f_NUMERO_TT            (_f_PARM_PROD.actu.desc_prod.num_TT) // _f_->input.produit_1[0].actu.desc_prod.num_TT

#define _f_PARM_PROD    (_f_INPUTS.produit_1[PACKAGE_PRODUIT_BASE]) 

    struct Inputs
    {
#define _f_INPUTS  (_f_->input)

        struct ParametersInputs
        {
#define _f_PARAMETERS   (_f_INPUTS.parameter) //_f_->input.parameter

            DATE date_fichiers;
            DATE date_fichiers_pp;

...

因此,我需要将其替换为

,而不是粘贴“_f_NUMERO_TT”
_f_->input.produit_1[0].actu.desc_prod.num_TT   
c++ macros preprocessor identifier immediate-window
1个回答
0
投票

你是对的:这绝对是可怕的代码。毫不奇怪,没有工具支持这样的代码。这只会鼓励人们继续使用这样的代码,而不是修复这个问题。对于工具制造商来说没有商业案例。

我建议修复代码。看来这段代码是由 C 开发人员编写的,而不是 C++ 开发人员编写的。这些宏似乎不能很好地替代内联方法。您或许可以逐步替换它们。

在修复它的同时,也翻译代码。拥有法语代码会使维护代码的人员减少 95%。一些评论也会有帮助。

这显然是一个技术债务案例。很难判断修复这个问题的成本有多大,每行代码可能需要 1 欧元到 100 欧元之间。但这很快就变成了一项商业决策,这在这里是题外话。

© www.soinside.com 2019 - 2024. All rights reserved.