warningi - co mogą oznaczać

0

1 warning:
Sourcery_G++_Lite/arm-none-eabi/lib/thumb2/libcs3unhosted.a(unhosted-_kill.o): warning: IO function '_kill' used

2 warning:
arm-none-eabi-gcc: ambiguous abbreviation __cc1plus: warning : command line for option "-ftarget="costam" is valid for Java but not for C++.

Czy ważne jest załatanie powyższych warningów?</asm>

0

Przyjęte standardy kodowania przyjmują, że kod powinien się kompilować bez żadnego ostrzeżenia, nawet na najwyższym poziomie 'uwagi'. Możliwe, że program zadziała Ci w 90% uruchomień, ale gdy rozbudujesz projekt, powiedzmy z 500 linijek zrobi Ci się 5000 i wtedy program zacznie się przez to krzaczyć, to Ty możesz szukać błędu zupełnie, gdzie indziej :)

Ja zawsze staram się rozwiązywać problemy, które są wyrzucane jako Warning i przynajmniej mam pewność, że wszystko zadziała.

0
Blood napisał(a)

Przyjęte standardy kodowania przyjmują, że kod powinien się kompilować bez żadnego ostrzeżenia, nawet na najwyższym poziomie 'uwagi'

Po coś są te poziomy, by nie masochizować się najmniejszymi „warningami” ;-)
Warningi są pomocne, ale czasami niektóre są na tyle bzdurne, że warto je po prostu olać lub wyłączyć.

0

Zgadza się, choć sam miałem kiedyś taki przypadek, że wywalało mi jakiś głupi warning, który był bzdurnie głupi (Dev-Cpp :S), a po rozpisaniu projektu do kilkunastu kolejnych plików, okazało się, że przez ten błąd program mi się krzaczył, bo ten warning przeszedł w kolejny itd.

0

Przyjęte standardy kodowania przyjmują, że kod powinien się kompilować bez żadnego ostrzeżenia, nawet na najwyższym poziomie 'uwagi'

Wcale nie :)
Nie warto ignorować poważnych ostrzeżeń, ale trzeba mieć pewien umiar - kompilatory domyślnie zachowują odpowiedni stosunek.

Wiesz że ten kod na najwyższym poziomie ostrzeżeń rzuci warning?

printf("mam %d lat", 5);

"poprawnie" powinno być

(void)printf("mam %d lat", 5);

żeby nie ignorować wartości zwracanej. Nie muszę chyba pisać że to dobre dla masochistów a nie programistów...
Tobie pewnie chodziło o brak ostrzeżeń na "normalnym" poziomie.

0

wracając do tematu te moje warningi pochodzace z kompilatora g++ można olać? Moim zdaniem ten odnoszący się do Javy na pewno tak.

0

Tu jest coś na temat pierwszego, a drugi oznacza że dany parametr jest dopuszczalny tylko w Javie.

Wiesz że ten kod na najwyższym poziomie ostrzeżeń rzuci warning?

Tutaj coś w tym temacie: http://www.yosefk.com/blog/coding-standards-having-more-errors-in-code-than-code.html

0

Dziwne. Kompilator C++ sypie komunikatami na temat innego języka..

0

Jakby to było ważne to dołączyłem flagę -l stdc++. Projekt był napisany w całości w C no i 1 z jego funkcjonalności trzeba było napisać w C++, no i wiadomo co za tym idzie trzeba było dołączyć flagę stdc++ i po tym własnie te 2 warningi wyskoczyły.

0

Kompilator jaki używany jest to gcc dla C i g++ dla C++.

0
othello napisał(a)

Dziwne. Kompilator C++ sypie komunikatami na temat innego języka..

Bo GCC to nie kompilator C++ tylko GNU Compiler Collection. Wrzucisz mu plik .c to skompiluje jako C, wrzucisz .cpp to skompiluje jako C++, .f77 jako Fortran, .pas jako Pascal, .m jako Objective C, .java jako Javę, i co tam jeszcze obsługuje (Ada). To wszystko pod warunkiem, że mamy zainstalowaną obsługę danego języka – zazwyczaj jest tylko C i C++.

Przykładowo:

c:\wiktor>gcc test.pas
gcc: test.pas: Pascal compiler not installed on this system

c:\wiktor>gcc test.java
gcc: CreateProcess: No such file or directory

c:\wiktor>gcc test.f95
gcc: CreateProcess: No such file or directory

jak widzimy GCC próbuje coś zrobić z tymi plikami, ale że nie mam potrzebnych pakietów, kompilacja się nie uda.

Kompilator jaki używany jest to gcc dla C i g++ dla C++.

uruchomienie g++

 jest mniej-więcej identyczne z uruchomieniem <code noframe>gcc -lstdc++

. Kompilator jest ten sam, inne opcje stają się domyślne.

0

No tak, w sumie prawda. O ile dobrze kojarze, gcc to tylko alias, który wywołuje różne kompilatory w zależności od potrzeb.

1 użytkowników online, w tym zalogowanych: 0, gości: 1