C++ 如何定义对func2(双X)的调用(双X)

C++ 如何定义对func2(双X)的调用(双X),c++,linux,gcc4.7,C++,Linux,Gcc4.7,我有大约200个文件,其中我们使用了“abs”函数来查找int、long和double的绝对值。对于double,正确的函数调用是fabs而不是abs。 现在在C++11中,它作为abs支持的双精度编译器处理,在C++11中也是如此,但我们目前使用的是旧的编译器 到C++11的转换计划在明年进行,我们需要间歇性地进行修复 现在,所有这些文件的开头都有一个名为StdAfx.h的头文件。所以我想要像#定义abs(X)fabs(X)这样的东西。然而问题是,这些文件还有其他头文件,比如math.h等,其

我有大约200个文件,其中我们使用了“abs”函数来查找int、long和double的绝对值。对于double,正确的函数调用是fabs而不是abs。 现在在C++11中,它作为abs支持的双精度编译器处理,在C++11中也是如此,但我们目前使用的是旧的编译器

到C++11的转换计划在明年进行,我们需要间歇性地进行修复

现在,所有这些文件的开头都有一个名为StdAfx.h的头文件。所以我想要像#定义abs(X)fabs(X)这样的东西。然而问题是,这些文件还有其他头文件,比如math.h等,其中实际上声明了abs和fabs,这使得这些代码不可编译

GCC称,ABS正在重新声明,因为那些C++标准头有ABS和FBS的声明。p> 所以我想在StdAfx.h中使用一些语句,这样只有对abs(double x)的“调用”被翻译成fabs(double x),而不是它的定义


请引导我

您不需要宏;只需在公共头文件中重载
abs

static double abs(double x) { return fabs(x); }

你不需要宏;只需在公共头文件中重载
abs

static double abs(double x) { return fabs(x); }

你想要的是不可能的。重写你的代码。我不太清楚为什么你认为这比修复受影响的代码要好。它可能使您能够快速构建,但从长期维护的角度来看,它显然不值得,您想要的是不可能的。重写你的代码。我不太清楚为什么你认为这比修复受影响的代码要好。它可能使您能够快速构建,但从长期维护的角度来看,它似乎并不值得。还考虑在操作命名空间中定义重载(例如,MyAuxBaseDoul超载),然后使用“使用命名空间MyAuthBuffiLyLoad Excel”语句将该命名空间引入范围。(意图更明确和使用可以在C++ 11支持下进行)?还考虑定义操作命名空间中的过载(例如,MyAsAbSuxDoul过载),然后使用“使用命名空间MyAuthBaseDoul超载”语句(意图更明确,使用C++ 11支持下的IFIFF)将命名空间引入范围。