C++ 将对变量的所有引用替换为C++#定义

C++ 将对变量的所有引用替换为C++#定义,c++,c-preprocessor,C++,C Preprocessor,不确定是否有人有维护旧代码的经验。在一些旧代码中,我在许多地方引用了一个全局变量。我想将所有对全局变量的引用替换为其他引用,比如函数调用。我可以在每个源文件中定义一个简单的#define吗?e、 g #define legacyGlobalVariable func1("legacyGlobalVariable") My func1()将接受旧变量的名称,并返回与legacyGlobalVariable相同的类型 我知道#define可以代替legacyGlobalVariable,它形成一个

不确定是否有人有维护旧代码的经验。在一些旧代码中,我在许多地方引用了一个全局变量。我想将所有对全局变量的引用替换为其他引用,比如函数调用。我可以在每个源文件中定义一个简单的#define吗?e、 g

#define legacyGlobalVariable func1("legacyGlobalVariable")
My func1()将接受旧变量的名称,并返回与legacyGlobalVariable相同的类型

我知道#define可以代替legacyGlobalVariable,它形成一个标记。但我不确定是否有这种简单技术无法处理的特殊情况。例如,我知道我需要防止这种情况:

legacyGlobalVariable(23);// a badly named function same name as my global var
成为

func1("legacyGlobalVariable")(23);//but at least, it cannot compile

这个简单的技术还有其他可能的问题吗?有人试过用它吗?我知道要验证所有可能的案例,都需要熟悉C++,这是目前我无法掌握的。这不会提高代码的可读性,因此我建议您咬紧牙关,改用编辑器的“查找/替换”功能。

主要问题在于此。这不会提高代码的可读性,因此我建议您咬紧牙关,改用编辑器的“查找/替换”功能。

这种简单的技术还有其他可能的问题吗?
对参数类型检查如何?
对于函数,将检查参数的类型,如果类型不匹配,编译器将返回错误。对于宏,没有这样的类型检查

此外,宏经常会给你带来许多难以想象的副作用

用函数替换它比通过宏映射函数要好得多。

这种简单的技术还有其他可能的问题吗?
对参数类型检查如何?
对于函数,将检查参数的类型,如果类型不匹配,编译器将返回错误。对于宏,没有这样的类型检查

此外,宏经常会给你带来许多难以想象的副作用


最好用函数替换它,而不是通过宏映射函数。

IMHO,如果代码足够旧并且工作正常,那么最好不要更改任何内容。遵循软件行业的规则:“在需要之前不要触摸任何东西。”


为什么您要浪费时间/精力来更改遗留代码并在各种场景中对其进行测试,而不是学习开发新的东西。如果某个代码因更改而损坏,那么您将花费更多的时间来修复该代码,而不是进行实际维护。

IMHO,如果代码足够旧并且工作正常,那么最好不要更改任何内容。遵循软件行业的规则:“在需要之前不要触摸任何东西。”


为什么您要浪费时间/精力来更改遗留代码并在各种场景中对其进行测试,而不是学习开发新的东西。如果某个东西因更改而损坏,那么您将花费更多的时间来修复它,而不是实际维护。

您可以使用一些脚本语言,例如perl 并自动查找和替换, 那会给你更多的控制权

e、 你可以很容易地避免这样的例子被修改

func1(“legacyGlobalVariable”)(23)


它还为您节省了大量时间。

您可以使用一些脚本语言,例如perl 并自动查找和替换, 那会给你更多的控制权

e、 你可以很容易地避免这样的例子被修改

func1(“legacyGlobalVariable”)(23)


这也为您节省了大量时间。

这是避免使用全局变量的众多原因之一。正如您亲身经历的那样,它使维护变得比需要的困难得多。这是避免全局变量的众多原因之一。正如您亲身经历的那样,这会使维护变得比需要的困难得多。使用编辑器的“查找/替换”将全局变量替换为函数调用(这样OP就不必再执行“查找/替换”)。使用编辑器的“查找/替换”将全局变量替换为函数调用(因此OP不必再次执行查找/替换)。