Как определить директиву как другую директиву в языке Си?
Как я могу определить директиву как другую директиву в языке C ?
Пример: Я хочу определить
#define #warning #warn
Я получаю ошибку
error #41: expected an identifier
Для составителей и задач, например, некоторые компиляторы распознают #warning и другие признают #warn.
У меня уже есть способ сделать это, но я хочу сделать его универсальным
#if PLATFORMS_TOOLCHAIN == PLATFORMS_ticgt
#warn "RAM is not initialized at startup, test will possibly fail"
#else
#warning "RAM is not initialized at startup, test will possibly fail"
#endif
2 ответа:
Невозможно создать собственные директивы препроцессора. Директива
#defineпозволяет определять только новые исходные символы.То, что вы сейчас делаете, - это правильный способ обработки различных директив на разных компиляторах.
В общем случае это невозможно, однако вы можете эффективно генерировать Директивы
#pragmaс помощью_Pragma keyword.#define PRAGMA(...) _Pragma(#__VA_ARGS__) PRAGMA(message "my message") //as if you wrote: #pragma message "my message"Имея это в виду, ваш компилятор может иметь прагмы, которые позволяют вам эмулировать
#warnили#error(#pragma GCC warning "message"или#pragma GCC error "message").Если у вашего компилятора нет таких прагм, вы всегда можете потерпеть неудачу при компиляции, расширяясь до чего-то относительно контекстно-свободного, что не компилируется, например,
char ERROR[-1];(отрицательные размеры массива запрещены).