我有一个相当庞大和复杂的应用程序集,这些应用程序是用旧版本的VC ++编写的。
在几个较低级别的类中使用的方法(在任何地方使用)命名为" export()"。
在更新版本的C ++中," export"是一个保留字。保留,但从未使用,显然它永远不会。
在VC ++ 2015中,我能做些什么来允许这些代码编译,而不必重命名方法?
答案 0 :(得分:5)
我的建议是采取命中并重命名方法。这很痛苦,但它会使您的代码兼容并且便于携带。
答案 1 :(得分:2)
如果你理解了我的意思,那就没有合法的方式:{C}一直保留export
并且有一个奇怪的历史:直到C ++ 11它是与模板一起使用,从C ++ 11开始,它没有任何意义,但仍然保留。我想export
将在支持 modules 的未来标准中获得不同的含义。 因此,如果您想编写可移植的C ++,则需要重命名方法。
使用#define
更改保留字行为的行为是未定义。
也就是说,MSVC2015并不是一个C ++ 11编译器,而且export
之前的关键字是#define
的事实。因此,有一种情况是在您的特定实例中合法使用__cplusplus
:您的代码已经无法移植。您可以检查str='23.889,45 €'
的值,这样您的代码就无法使用C ++ 11编译器进行编译。这会给你带来一些时间。
答案 2 :(得分:1)
形式上它是未定义的行为,但VC2015不会抱怨:#define export EXPORT
。或/D
作为项目设置。