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
- 1. Jak łączyć funkcje bez użycia prototypu?
- 2. Funkcje wewnątrz konstruktora kontra prototypu
- 3. Wywołanie adresu C jako funkcji bez prototypu
- 4. C++: Funkcje łańcuchowe bez <cstring>
- 5. Deklarowanie prototypu typu "struct" - C
- 6. Jak znaleźć nieużywane funkcje w projekcie PHP
- 7. Jak przekazać funkcję prototypu?
- 8. Czy mogą istnieć samodzielne funkcje w języku C# bez klasy?
- 9. Jak znaleźć funkcje w pliku cpp, które zawierają konkretne słowo
- 10. Sztuczne anonimowych funkcje C
- 11. funkcje ukrywanie w C
- 12. JavaScript: Tworzenie obiektów na podstawie prototypu bez użycia nowego + Konstruktora
- 13. C++ lotne funkcje członkowskie
- 14. Funkcje wbudowane w C++
- 15. C++ i FULLY funkcje dynamiczne
- 16. Czy wywołanie printf bez odpowiedniego prototypu wywołuje niezdefiniowane zachowanie?
- 17. Jak wywoływać funkcje Matlab z C++
- 18. Jak podzielić zdemontowany kod C na funkcje?
- 19. Jak dodać/edytować funkcje na tej samej stronie bez migotania?
- 20. Nadpisanie prototypu JavaScript
- 21. Matlab: jak znaleźć funkcje na ścieżce, która używa danej funkcji
- 22. C# lambda Funkcje: zwracania danych
- 23. C#: Funkcje rekurencyjne z lambdas
- 24. Czy C# wbuduje te funkcje?
- 25. obiektywne metody C Klasa vs C Funkcje
- 26. Brak poprzedniego prototypu?
- 27. jQuery: Jak znaleźć elementy * * bez pewnej klasy
- 28. Czy powinienem użyć prototypu, czy nie?
- 29. C++: funkcje zewnętrzne i inline
- 30. Jak wybrać odpowiednią opcję przy użyciu prototypu
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