gpt4 book ai didi

c++ - 如何处理遗留代码中的方法名称重复

转载 作者:太空狗 更新时间:2023-10-29 21:04:09 27 4
gpt4 key购买 nike

我的遗留代码中有这个

#define max(x, y)   (x > y ? x : y)
#define min(x, y) (x < y ? x : y)

那个 bean 在应用程序中使用了 allot,现在我尝试在 freeBSD 中编译它我不断得到:

/usr/include/c++/4.2/bits/istream.tcc:123:35: error: macro "min" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:124:45: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:143:33: error: macro "min" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:144:43: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:438:48: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:441:53: error: macro "min" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:449:47: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:489:48: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:493:53: error: macro "min" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:501:47: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:507:53: error: macro "max" requires 2 arguments, but only 1 given
/usr/include/c++/4.2/bits/istream.tcc:806:43: error: macro "max" requires 2 arguments, but only 1 given

我猜它是代码中方法的名称(宏)。
现在改名很管用。
我怎样才能继续使用它但避免编译器混淆?

最佳答案

首先定义这些宏的原因是什么?它是 C++,不需要任何宏,尤其是那些已经按照标准作为函数提供给你的宏(当包含 <windows.h> 并收到关于它们愚蠢的 minmax 宏的投诉时,我总是很困扰)。

话虽如此,一个快速而肮脏的解决方案可能是用

替换您的宏定义
#include <algorithm>
using std::min;
using std::max;

尽管如此,这仍然会污染全局命名空间,那些现在是可以被任何局部变量或任何其他函数或方法隐藏的适当函数名称,而不仅仅是在任何地方都被愚蠢的文本替换预处理器替换。

除此之外,考虑在这些宏(或 using s)之前包含任何系统包含文件。

关于c++ - 如何处理遗留代码中的方法名称重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122960/

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