визуальное использование зарезервированных слов в переполнении стека

У меня есть довольно большой и сложный набор приложений, которые были написаны в более старой версии VC ++.

В нескольких классах нижнего уровня (которые используются везде) есть методы с именем «export ()».

В более поздних версиях C ++ «экспорт» является зарезервированным словом. Зарезервировано, но никогда не используется, и, видимо, никогда не будет.

Есть ли что-то, что я могу сделать в VC ++ 2015, чтобы этот код компилировался без переименования методов?

2

Решение

Мой совет — принять удар и переименовать методы. Это боль, но она сделает ваш код совместимым и переносимым.

5

Другие решения

Нет никаких законный Кстати, если вы меня поняли: export был зарезервирован с C ++ 98 и имеет любопытную историю: до C ++ 11 он использовался с шаблонами, а с и с C ++ 11 он не имеет смысла, но все еще зарезервирован. Я представляю что export приобретет другое значение в будущем стандарте, который поддерживает модули. Так что если вы хотите написать переносимый C ++, вам нужно переименовать методы.

Поведение при изменении поведения зарезервированного слова с помощью #define является не определено.

Тем не менее, MSVC2015 не претендует на звание компилятора C ++ 11 и слабо говорит о том, что export это ключевое слово до этого. Так что есть основания для законного использования #define в вашем конкретном случае: ваш код уже не является переносимым. Вы можете проверить значение __cplusplus поэтому ваш код не может быть скомпилирован с помощью компилятора C ++ 11 и выше. Это купит вам некоторое время.

Ссылка: http://en.cppreference.com/w/cpp/keyword/export

2

Формально это неопределенное поведение, но VC2015 не будет жаловаться: #define export EXPORT, Или же /D в качестве настройки проекта.

1
По вопросам рекламы [email protected]