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?
printing
c-preprocessor
Andrew Wagner
źródło
źródło
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... będę musiał spróbować, ale instynkt podpowiada mi, że odpowiedź brzmi: nie.#define WARNING(msg) _Pragma("message " #msg)
Następujące są obsługiwane przez MSVC i GCC .
Clang zaczął ostatnio dodawać obsługę, zobacz tutaj, aby uzyskać więcej informacji.
źródło
Możesz spróbować:
#pragma message("Hello World!")
źródło
Większość kompilatorów C rozpozna
#warning
dyrektywę, więcJest też standardowa dyrektywa „#error”,
Chociaż wszystkie kompilatory to obsługują, zatrzyma to również kompilację / przetwarzanie wstępne.
źródło
działa świetnie. Również nie zatrzyma kompilacji, nawet jeśli użyjesz -Werror
źródło
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 zapisujeprintf("TODO ...")
do*.c
pliku wyjściowego .źródło
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:
Ponieważ to wszystko, co możesz zrobić, jeśli chodzi o preprocesory.
źródło