Я хочу проверить использование константы в исходном файле и, если она используется, остановить компиляцию.
Указанная константа определена в универсальном файле драйвера, от которого наследуется ряд реализаций драйвера. Однако его использование устарело, поэтому последующие обновления каждого драйвера должны переключаться на использование нового вызова метода, а не на использование этого постоянного значения.
Очевидно, это не работает
#ifdef CONST_VAR
#error "custom message"
#endif
Как я могу сделать это элегантно? Поскольку это int, я могу определить CONST_VAR как строку и позволить ей потерпеть неудачу, но это может затруднить разработчикам понимание того, что на самом деле пошло не так. Я надеялся получить хорошее сообщение типа #error.
Есть предложения?
Ядовитый ответ здесь превосходен. Однако для более старых версий VC ++, которые не поддерживают [[не рекомендуется]], я обнаружил следующие работы.
Используйте [[deprecated]]
(компиляторы C ++ 14) или __declspec(deprecated)
Чтобы воспринимать это предупреждение как ошибку в модуле компиляции, поместите следующую прагму в верхнюю часть исходного файла.
#pragma warning(error: 4996)
* * Например, тысяча двадцать-три
const int __declspec(deprecated) CLEAR_SOURCE = 0;
const int __declspec(deprecated("Use of this constant is deprecated. Use ClearFunc() instead. See: foobar.h"));