Я бы хотел сделать что-нибудь вроде
#print "C Preprocessor got here!"
в целях отладки. Какой лучший / самый портативный способ сделать это?
Я бы хотел сделать что-нибудь вроде
#print "C Preprocessor got here!"
в целях отладки. Какой лучший / самый портативный способ сделать это?
Ответы:
Эта warning
директива, вероятно, наиболее близка к вам, но она не полностью независима от платформы:
#warning "C Preprocessor got here!"
AFAIK это работает на большинстве компиляторов, кроме MSVC, для которых вам нужно будет использовать pragma
директиву:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
Другое решение - использовать комментарии и сценарий оболочки для их обработки. Это требует некоторой дисциплины (или сценария оболочки, который обнаруживает опечатки).
Например, я добавляю отформатированные комментарии, //TODO
а затем скрипт оболочки, который собирает их все в отчет.
Для более сложных случаев использования вы можете попробовать написать собственный простой препроцессор. Например, вы можете редактировать свои источники как *.c2
файлы. Простой препроцессор будет читать исходный код, искать //TODO
и записывать printf("TODO ...")
в выходной *.c
файл.
Вы не можете. Препроцессоры обрабатываются до кода C. Нет никаких директив препроцессора для вывода на экран, поскольку код препроцессора не выполняется, он используется для генерации кода C, который будет скомпилирован в исполняемый код.
Что-то не так с:
#ifdef ...
printf("Hello");
#endif
Потому что это все, что вы можете сделать с препроцессорами.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... Мне придется попробовать, но инстинкт подсказывает мне, что ответ отрицательный.