Article View: pl.comp.lang.c
Article #309885Re: W której wersji standardu C lub C++ pracujecie?
From: Maciek Godek
Date: Tue, 06 Aug 2019 13:05
Date: Tue, 06 Aug 2019 13:05
33 lines
4187 bytes
4187 bytes
W dniu wtorek, 6 sierpnia 2019 14:02:33 UTC+2 użytkownik Queequeg napisał:
> Pytanie do osób, które programują zawodowo w C lub C++. Której wersji
> standardu używacie w projektach w pracy?
>
> Zastanawiam się, czy to specyfika środowiska embedded, ale u nas nadal
> obowiązuje C++03. "Się nie da" chociażby w C++11, bo używamy starego
> kompilatora (bo nowego nie wspiera archaiczne środowisko).
>
> A jak to jest u was (+ jaka branża, tak z grubsza, jeśli to nie
> tajemnica)?
W branży embedded, jeśli się da (czyli np. na ARMy albo na jakieś linuksy) to korzystam z GCC i wówczas używam rozszerzeń GNU99 (-std=gnu99).
Flagi warningów mam
-Wall -Wconversion -Wno-float-conversion -Wno-sign-conversion -Werror=uninitialized -Werror=implicit-int -Werror=return-type -Werror=conversion
To ważne, bo ani -Wall ani nawet -Wextra w GCC nie wyłapie czegoś takiego:
uint32_t f() {
return JAKAŚ_DUŻA_WARTOŚĆ;
}
uint16_t x = f();
(co uważam że jest skandaliczne i byłem w szoku jak to odkryłem. Zresztą nadal jestem w szoku)
Jak się nie da, to wtedy zależy co mi obsługuje kompilator (np. kompilator Cosmic dla STM8 ma jakieś tam swoje ograniczenia co do wersji języka C, nawet nie wiem, czy w pełni obsłuży C89; Keil uVision dla 8051 chyba podobnie)
Staram się w pracy utrzymywać kulturę pracy w terminalu uniksowym (MSYS2 albo WSL) z Makefile'ami. Moje doświadczenia w pracy z różnymi "dedykowanymi" środowiskami wykazywały, że choć niektóre rzeczy robi się prościej (np. debugowanie), to dedykowane środowiska stanowią barierę dla rozwoju i przenoszenia projektów na większą skalę. Staram się też dbać o to, żeby cała logika kodu, oprócz tego, że można ją uruchomić na kontrolerach, była też uruchamialna i testowalna na PCtach (i np. jak mam urządzenia, które normalnie komunikowałyby się po kablu albo po radiu, to ten sam kod może się komunikować po gniazdach sieciowych). Na pozór wydaje się, że to więcej pracy, ale w praktyce owo "więcej pracy" zajmuje w moim doświadczeniu o rzędy wielkości mniej czasu, bo mogę łatwo pisać testy automatyczne dla logiki, i takie środowisko do debugowania jest dużo wygodniejsze, niż dotykanie rzeczywistych urządzeń (oczywiście obsługę peryferiów trzeba ręcznie wytestować).
Zaletą jest też to, że w ten sposób powstaje lepsza architektura kodu, bo taka praktyka poniekąd wymusza, żeby oddzielać logikę aplikacji od obsługi peryferiów (widziałem projekty, w których to było ze sobą splecione, i nie polecam).
Od C++ wolę się trzymać z daleka.
Technical Details
Message-ID:
<3f1215b5-3c16-4248-a74f-1b57d21d4c98@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.albasani.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!b26no6272104qtq.0!news-out.google.com!a5ni1359qtd.0!nntp.google.com!b26no6272100qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<a1fbe21b-aed9-4b32-9691-a824c4e31a21@trust.no1>Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:19d8:: with SMTP id s24mr2912328qtk.44.1565096736091; Tue, 06 Aug 2019 06:05:36 -0700 (PDT) X-Received: by 2002:a81:3313:: with SMTP id z19mr2205403ywz.188.1565096735845; Tue, 06 Aug 2019 06:05:35 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.albasani.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!b26no6272104qtq.0!news-out.google.com!a5ni1359qtd.0!nntp.google.com!b26no6272100qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Tue, 6 Aug 2019 06:05:35 -0700 (PDT) In-Reply-To: <a1fbe21b-aed9-4b32-9691-a824c4e31a21@trust.no1> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.68.153; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 213.192.68.153 References: <a1fbe21b-aed9-4b32-9691-a824c4e31a21@trust.no1> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <3f1215b5-3c16-4248-a74f-1b57d21d4c98@googlegroups.com> Subject: Re: W której wersji standardu C lub C++ pracujecie? From: Maciek Godek <godek.maciek@gmail.com> Injection-Date: Tue, 06 Aug 2019 13:05:36 +0000 X-Received-Bytes: 4621 X-Received-Body-CRC: 4147075617 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit