Мені б хотілося зробити щось подібне
#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)
Наступні підтримуються MSVC та GCC .
#pragma message("stuff")
#pragma message "stuff"
Кланг почав додавати підтримку останнім часом, дивіться тут докладніше.
Іншим рішенням є використання коментарів плюс сценарій оболонки для їх обробки. Це вимагає певної дисципліни (або сценарію оболонки, який ловить помилки).
Наприклад, я додаю відформатовані коментарі, //TODO
а потім сценарій оболонки, який збирає їх у звіт.
Для складніших випадків використання можна спробувати написати власний простий препроцесор. Наприклад, ви можете редагувати джерела як *.c2
файли. Простий препроцесор читав би джерело, шукав //TODO
і записував printf("TODO ...")
у вихідний *.c
файл.
Ви не можете. Передпроцесори обробляються перед кодом С. Немає директив препроцесора для друку на екран, оскільки код препроцесора не виконується, він використовується для генерування коду С, який буде компільований у виконуваний код.
Щось не так:
#ifdef ...
printf("Hello");
#endif
Тому що це все, що ти можеш зробити, якщо йдеться про препроцесори.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... Я повинен спробувати це, але інстинкт говорить мені, що відповідь - ні.