Zgodnie z zasadami firmy każda funkcja w kodzie źródłowym C ma prototyp. Odziedziczyłem projekt z własnym systemem make (więc nie mogę go przetestować w gcc lub Visual Studio) i odkryłem, że jeden z plików ma kilka funkcji statycznych zadeklarowanych bez prototypów. Czy istnieje sposób (niekoniecznie z kompilatorem) do wypisania wszystkich funkcji bez prototypów we wszystkich plikach .c?Jak znaleźć funkcje C bez prototypu?
Odpowiedz
gcc ma opcję, aby ostrzec cię o tym:
gcc -Wmissing-prototypes
Można włączyć to ostrzeżenie do błędu zatrzymania kompilacji i zmusić ludzi, aby je naprawić:
gcc -Werror=missing-prototypes
Jeśli tylko chcesz aby go wyświetlić, możesz skompilować z opcją gcc
opcję -Wmissing-prototypes
i grep dla brak wcześniejszego prototypu dla w dzienniku.
Aktualizacja oparta na edycji:
Ponieważ teraz wspomnieć, że nie można używać gcc, trzeba będzie znaleźć podobną opcję dla bieżącej kompilator. Większość kompilatorów ma taką opcję. Rozpocznij od strony podręcznika lub wbudowanego wyjścia pomocy.
Przepraszam, jeśli nie wyjaśniłem, ale ma on własny system kompilacji, więc nie mogę go przetestować na gcc. – Gnubie
"system kompilacji"! = "Kompilator". Zakładam, że jakikolwiek kompilator użyty w tym niestandardowym systemie kompilacji (gcc/icc/clang/.......) ma różne opcje/przełączniki, aby włączyć ostrzeżenia/błędy/itd. To byłby początek, nawet jeśli to nie jest gcc ... – twalberg
ok, sprawdzę to. Dziękuję wszystkim! – Gnubie
ctags
może to zrobić!
--c-kinds=p
generuje listę wszystkich prototypów funkcji
--c-kinds=f
generuje listę wszystkich definicji funkcji
Teraz wystarczy porównać te.
diff -u <(ctags -R -x --sort=yes --c-kinds=f | cut -d' ' -f1) <(ctags -R -x --sort=yes --c-kinds=p | cut -d' ' -f1) | sed -n 's/^-//p'
+1 To miłe rozwiązanie! – jman
funkcje statyczne naprawdę nie trzeba prototypy, chyba że są one nazywane, zanim zostaną one zdefiniowane –
@Paul: Tak, ale przypuszczam, że to pozwala kierownika projektu, aby szybko zobaczyć, jakie są dostępne itp – Gnubie
Jeśli funkcje nie możesz użyć innego kompilatora, z nieznanych przyczyn, będziesz musiał uzyskać osobne narzędzie do analizy statycznej. Wszystkie takie narzędzia na rynku znajdą wszystkie brakujące prototypy dla ciebie, – Lundin