我在 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 开发人员编写的,而不是 C++ 开发人员编写的。这些宏似乎不能很好地替代内联方法。您或许可以逐步替换它们。
在修复它的同时,也翻译代码。拥有法语代码会使维护代码的人员减少 95%。一些评论也会有帮助。
这显然是一个技术债务案例。很难判断修复这个问题的成本有多大,每行代码可能需要 1 欧元到 100 欧元之间。但这很快就变成了一项商业决策,这在这里是题外话。