Chciałbym móc zrobić coś takiego
#print "C Preprocessor got here!"
do celów debugowania. Jaki jest najlepszy / najbardziej przenośny sposób na zrobienie tego?
Chciałbym móc zrobić coś takiego
#print "C Preprocessor got here!"
do celów debugowania. Jaki jest najlepszy / najbardziej przenośny sposób na zrobienie tego?
Odpowiedzi:
warning
Dyrektywa jest chyba najbliżej dostaniesz, ale to nie jest całkowicie niezależny od platformy:
#warning "C Preprocessor got here!"
AFAIK to działa na większości kompilatorów z wyjątkiem MSVC, na którym będziesz musiał użyć pragma
dyrektywy:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
#pragma message("foo")
działa świetnie. Również nie zatrzyma kompilacji, nawet jeśli użyjesz -Werror
Innym rozwiązaniem jest użycie komentarzy i skryptu powłoki do ich przetwarzania. Wymaga to pewnej dyscypliny (lub skryptu powłoki, który wyłapuje literówki).
Na przykład dodaję sformatowane komentarze //TODO
a następnie skrypt powłoki, który zbiera je wszystkie w raporcie.
W przypadku bardziej złożonych przypadków użycia możesz spróbować napisać własny prosty preprocesor. Na przykład możesz edytować źródła jako *.c2
pliki. Prosty preprocesor czyta źródło, szuka //TODO
i zapisuje printf("TODO ...")
do *.c
pliku wyjściowego .
Nie możesz. Preprocesory są przetwarzane przed kodem C. Nie ma dyrektyw preprocesora do wydrukowania na ekranie, ponieważ kod preprocesora nie jest wykonywany, jest używany do generowania kodu C, który zostanie skompilowany do kodu wykonywalnego.
Coś nie tak z:
#ifdef ...
printf("Hello");
#endif
Ponieważ to wszystko, co możesz zrobić, jeśli chodzi o preprocesory.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... będę musiał spróbować, ale instynkt podpowiada mi, że odpowiedź brzmi: nie.