Nauka języka C

K1
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:1
0

Witam wszystkich. Na wstępie chciałem zaznaczyć że jestem tu nowy. Bardzo chciałbym nauczyć się programować w języku C i tu moje pytanie. Skąd czerpać najlepiej wiedzę? Dodam że kompletnie nic nie umiem i chciałbym zacząć od podstaw. Polecacie jakieś książki może fora internetowe? I drugie pytanie czy język C pomaga w nauce innych języków?

JP
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Bydgoszcz
  • Postów:12
0

Jeśli chodzi o język C, to jest to chyba najlepszy kurs w polskiej sieci.
https://pl.wikibooks.org/wiki/C

Tak, znajomość języka C zdecydowania pomaga w nauce innych języków programowania, a także pomaga w pisaniu lepszego i szybszego kodu.

edytowany 2x, ostatnio: jpacanowski
fasadin
ok, wiec jak C ma sie do jezykow funkcyjnych. Bo IMO C# bedzie lepszy pod jezyki funkcyjne (juz pomijajac ze po prostu zaczac sie jezyka funkcjyjnego)
perotin
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:174
1

A dlaczego wybrałeś język C? Jest to język przeznaczony do dosyć wąskiej grupy oprogramowania.

Znakomita książka dla początkujących (tak samo jak edycja dotycząca C++):
http://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-vi-stephen-prata,jcszp6.htm

edytowany 1x, ostatnio: perotin
K1
Wybrałem C bo znajomi mi powiedzieli że po dobrym opanowaniu go można uczyć się łatwo innych języków. A jaki inny język byś polecił?
perotin
C# albo Python. To są przyjemne języki i materiałów (darmowych) w sieci jest mnóstwo. Pamiętaj, że C nie ma obiektowości, która jest podstawową cechą innych, popularnych języków.
perotin
Zapomnij o znajomych, uwierz w nas.
Sparrow-hawk
  • Rejestracja:prawie 13 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Katowice
  • Postów:189
0

Mogę polecić, oprócz powyższej:

  1. Język ANSI C. Programowanie. Wydanie II - Brian W. Kernighan, Dennis M. Ritchie
  2. Programowanie w C. Sprytne podejście do trudnych zagadnień, których wolałbyś unikać (takich jak język C) - Zed A. Shaw

Internetowe kursy języka C pokazują zazwyczaj prostą semantykę języka, pomijając większość kluczowych zagadnień, takich jak działanie kompilatora, czy skromną bibliotekę tego języka.

A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:408
1

Tak, C pomaga w nauce innych języków, bo masa innych języków ma bardzo podobną składnię do niego. Choć nauka innego języka niż C też pomoże w nauce innych języków, ale być może w mniejszym stopniu poprzez np. duże różnice w składni.

edytowany 2x, ostatnio: arkadiusz97
JU
  • Rejestracja:około 22 lata
  • Ostatnio:28 dni
  • Postów:5042
0

Czemu chcesz zaczynać od języka C? Jest bardzo trudny jak na początek. Przynajmniej w dzisiejszych czasach. Wybierz sobie jakiś prostszy język, np. C#. Jak w nim ogarniesz o co chodzi w programowaniu, to wtedy możesz zejść do C.

vpiotr
C to jeden z prostszych języków. Chodziło Ci o C++?
fasadin
popieram vpiotra. C sam w sobie jest bardzo prosty i przejrzysty. Oprocz wskaznikow i unii w C nie ma nic skomplikowanego (mozna zrobic kod skomplikowany ale nie jako jezyk sam w sobie)
KA
dokładnie. C jest prosty i przejrzysty
JU
Chodzi mi właśnie o te wskaźniki, unie, stringi i inne smaczki, które trzeba oprogramować w głupi sposób. Nie mówię, że nie warto, bo zawsze warto wiedzieć, jak działają takie rzeczy na niższych poziomach. Ale żeby zaczynać od prostszych rzeczy. Oczywiście wszystko jeszcze zależy, co ma być oprogramowywane. Bo jeśli zwykłe aplikacje konsolowe albo okienkowe, no to wielka bida. Ale jeśli sterowniki, czy coś niskiego, no to już inna gadka.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
9

C warto znać na tej samej zasadzie co ASM.
W C możesz zrobić dowolny soft - wystarczy dużo silnej woli.
W innych językach, nawet jeśli jesteś biegły, niektórych rzeczy nie dasz rady zrobić.
Można np. się ograniczyć do stacku webdev (typu PHP + JavaScript + CSS + HTML), ale wtedy taki osobnik nie powinien się nazywać programistą (może jakimś inżynierem ds. aplikacji webowych).
Wg mnie książka Prata jest przesadzona. 1024 strony o tym języku brzmi jak okrutny żart ("przeczytaj to a potem już wszystko będzie dla Ciebie banałem"). To sporo za dużo jak na książkę o podstawach.

Od siebie polecam niezmiennie K&R (328 stron) - http://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm
chociaż dzisiaj może być już lekko nieaktualna.

Satanistyczny Awatar
A Prata nie przepisywał od pewnego momentu podręcznika systemowego POSIX BTW? xD Gdzieś widziałem jakąś książkę, która tak miała.
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:6 dni
  • Postów:1082
0

Też polecę jak kolega @vpiotr K&R jak dla mnie nie ma lepszej książki fajnie wprowadzającej w tematykę języka C.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
1

@vpiotr: Cała prawda. C bardzo dobrze znać. Poza tym dla mnie C ma w sobie tę niskopoziomowość, która kiedyś strasznie mi się podobała. Uwielbiałem bawić się zarządzaniem pamięcią i wskaźnikami. Wiele się dzięki temu nauczyłem. Później idąc w języki wysokopoziomowe widać w jakim kierunku to wszystko wyewoluowało. Nie masz problemu ze zrozumieniem takich rzeczy jak typ referencyjny czy typ wartościowy w takim C#. Znając C można sobie ich działanie odpowiednio skojarzyć. Nauczysz się wykrywać wycieki pamięci za pomocą valgrind, a co za tym idzie dobrze pamięcią zarządzać.

Zobaczysz jak np. dynamiczna alokacja pamięci za pomocą malloc i free w C wyewoluowała do postaci new i delete w C++ aż po gołe new w językach wysokiego poziomu. Przekonasz się na własne oczy czym grozi przesyłanie wielkich obiektów przez wartość zamiast przez wskaźnik. Tego w językach wysokopoziomowych nie widać, bo np. klasa jest tam z definicji typem referencyjnym. Mnóstwo jest zalet takiej nauki.

Dla mnie np. było to fascynujące.

edytowany 3x, ostatnio: grzesiek51114
A9
Taki mały szczegół, w c++ też da się użyć samego new bez delete, bez późniejszego wycieku pamięci używając np. unique_ptr, jeśli miałeś na myśli po prostu brak konieczności zwalniania pamięci.
grzesiek51114
grzesiek51114
Tak, tak wiem ale miałem na myśli takie pure old school memory allocation
wujnia
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:161
0

Napisz na priv.

Ewentualnie pogadamy na irc I polecę Ci to i owo.

Pzdr.

Ozymandias
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Podbijam, od jakich książek/ materiałów warto zacząć naukę języka C ? Może wątek już trochę umarł, więc myślę iż warto odświeżyć :)

JP
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Bydgoszcz
  • Postów:12
1
Ozymandias napisał(a):

Podbijam, od jakich książek/ materiałów warto zacząć naukę języka C ? Może wątek już trochę umarł, więc myślę iż warto odświeżyć :)

Zamiast pobijać, wystarczy przeczytać wyżej napisane odpowiedzi...
Podałem tam link -> https://pl.wikibooks.org/wiki/C

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:6 dni
  • Postów:1082
1
vpiotr
Powinno byc przybite na stale
MY
@vpiotr też tak uważam, bo chyba nie ma lepszej książki od tej na początek
Ozymandias
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Dziękuję :)

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1
Kacpib18 napisał(a):

I drugie pytanie czy język C pomaga w nauce innych języków?

Trochę pomaga, trochę przeszkadza. C niestety uczy myśłenia o wielu bzdurkach, które nie są istotne dla programowania w językach wysokiego poziomu.
Do dzisiaj mam alergię na kod w C++ pisany przez programistów C. (wskaźniki i makra).
(A kiedyś widziałem nawet trochę takiej javy).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Zobacz pozostały 1 komentarz
jarekr000000
to grubo (gdzieś tak w 2004-2005 przestałem spotykać, myślałem, że to pokolenie wymarło i rak pozostał tylko w C++).
robertwadowski
robertwadowski
ba potem okazało się, ża kod autora był pokazywany jako przykład jak mają pisać kod w jobach sparkowych - skończyło się tak, że na widok czegoś takiego do poprawki nikt tego ni czytał tylko delete i lecimy od zera
jarekr000000
czyli : jak zwykle w Scali :-)
robertwadowski
robertwadowski
ta, ino tego w jakimkolwiek języku nie dało się czytać, to nawet nie chodziło o jakiś language way a o zwykły rozsądek ...
PerlMonk
C# niby taki łatwiejszy a potem wyrastają takie programisty 15k, co 8GB RAM to dla nich mało.
Ozymandias
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

Do programowania w języku C niezbędny jest Linux ?

edytowany 1x, ostatnio: Ozymandias
vpiotr
Do programowania w C wystarczy glowa. W drugiej kolejnosci dowolny OS i komputer.
GO
To nie jest obszar w którym coś wiem ale w sieci można o tym poczytać, wystarczy poszukać. Kawałek historii - 1 . https://pl.wikipedia.org/wiki/C_(j%C4%99zyk_programowania) 2. Dennis Ritchie https://www.youtube.com/watch?v=tc4ROCJYbm0&feature=youtu.be&t=706 3. https://pl.wikipedia.org/wiki/Unix . Polegając na wiki bo ten język pierwotnie powstał dla systemów uniksowych, wtedy kiedy jeszcze windows nie instniał. Poza tym te narzędzia są teraz wbudowane w linuxy, w ubuntu masz od razu kompilator gcc, g++, a na windows trzeba dopiero instalować.
J6
Nie do końca jest tak, ja np używam dystrybucji opartej o repozytoria Ubuntu, czyli Mint, i tam gcc faktycznie jest dostępne od razu po instalacji, natomiast g++ trzeba doinstalować.
PerlMonk
Linux jest niezbędny wszędzie!
Ozymandias
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0
Ozymandias napisał(a):

Do programowania w języku C niezbędny jest Linux ?

Dziękuję :)

PR
PR
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
0

Poza tym, że C++ jest trudniejszy od C jakie ma zalety w porównaniu do czystego C? Gdybym chciał napisać program typu AIMP w QT i go sprzedawać to muszę zapłacić za licencje QT5? A w GTK mogę wszystko robić za darmo? Wiem, że jeszcze jest hybryda GTK+ do pisania C z klasami i obiektowo, oraz GTKMM do pisania w C++. A wieloplatformowa biblioteka graficzna wxWidgets 3 też wymaga opłaty licencyjnej?
https://helion.pl/ksiazki/programowanie-wieloplatformowe-z-c-i-wxwidgets-3-bartosz-w-warzocha,e_17vd.htm#format/e

MarekR22
Tu masz filmik dowodzący, że przy właściwym nauczaniu jest dokładnie na odwrót.
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
1
prototype napisał(a):

Poza tym, że C++ jest trudniejszy od C jakie ma zalety w porównaniu do czystego C? Gdybym chciał napisać program typu AIMP w QT i go sprzedawać to muszę zapłacić za licencje QT5? A w GTK mogę wszystko robić za darmo? Wiem, że jeszcze jest hybryda GTK+ do pisania C z klasami i obiektowo, oraz GTKMM do pisania w C++. A wieloplatformowa biblioteka graficzna wxWidgets 3 też wymaga opłaty licencyjnej?
https://helion.pl/ksiazki/programowanie-wieloplatformowe-z-c-i-wxwidgets-3-bartosz-w-warzocha,e_17vd.htm#format/e

XD

C jest mniej rozbudowanym jezykiem (prostszym?) ale cos sensownego trudniej napisac


λλλ
PR
Ponieważ? Xfce powstało w całości w C i GTK i działa pięknie, a Gnome teraz wplątuje w swój kod dużo JavaScript i ostatnio były błędy i wycieki pamięci w Gnome 3. W sumie jeszcze łatwiej można coś napisać w JavieFX niż w QT, tylko jak wolno to działa. Najlepsze aplikacje na desktop tworzone raczej są w C++ i Qt. https://www.youtube.com/watch?v=Kh6K-yEp_JY
stivens
I co ze dziala pieknie? Gdzie ja pisalem ze dziala slabo? Kiedys ludzie programowali tasmy perforowane i tez pieknie dzialalo. C ma swoje zastosowania. C++ ma swoje. Ale napisanie czegos jest prostsze w C++
PR
Sam C++ jest trudniejszy od Javy. Ale przerobiłem jeden turorial w JavaFX i drugi w QT i jak dla mnie tworzenie programów graficznych w QT5 jest łatwiejsze. Pisanie w QT wydaje się jak byś to pisał w zupełnie innym języku programowania niż C++.
somedev
No właśnie - wydaje się, ale pod spodem to nadal to samo dziecko z zapałkami. Jak nie utrzymywałeś kodu C++ koło 1kk LOC, który ma 20 lat to nie ocenisz co lepiej się nadaje do takich projektów. Podpowiem, że na pewno nie C czy C++ jeśli chodzi o apki biznesowe.
tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
0
prototype napisał(a):

Poza tym, że C++ jest trudniejszy od C jakie ma zalety w porównaniu do czystego C? Gdybym chciał napisać program typu AIMP w QT i go sprzedawać to muszę zapłacić za licencje QT5? A w GTK mogę wszystko robić za darmo? Wiem, że jeszcze jest hybryda GTK+ do pisania C z klasami i obiektowo, oraz GTKMM do pisania w C++. A wieloplatformowa biblioteka graficzna wxWidgets 3 też wymaga opłaty licencyjnej?
https://helion.pl/ksiazki/programowanie-wieloplatformowe-z-c-i-wxwidgets-3-bartosz-w-warzocha,e_17vd.htm#format/e

Tak w skrócie to: wyjątki, lambdy, szablony(i co za tym idzie cały STL czyli inteligentne wskaźniki, kontenery, algorytmy, string, wątki, system plików, etc.)

Nie musisz kupować licencji Qt


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:15 minut
1

Dlaczego C++ wydaje się trudniejszy od C? Bo 99% kursów w internecie uczy, C++ zaczynając od C.
Jeśli pominąć bardziej zaawansowane właściwości języka C++ to C++ jest łatwiejszy od C dla początkujących, co można zobaczyć dlaczego tak jest tutaj.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
MO
  • Rejestracja:prawie 10 lat
  • Ostatnio:35 minut
  • Lokalizacja:Tam gdzie jest (centy)metro...
3

Ogólnie C odwołuje się do problemów JAK coś zrobić. Zbudowanie w nim abstrakcji które przedstawiają strawne dla człowieka struktury algorytmów/rozwiązań/modułów/... obiektów, wymaga wysiłku w trakcie którego ginie często pierwotna idea i cel rozwiązania. Z kolei C++ odwołuje się do rozwiązań CO należy zrobić. W przypadkach gdy jest to konieczne (np. wydajność, właściwości platformy...), umożliwia odwołanie się do rozwiązań JAK. Przy dobrym podejściu, w C++ nie ginie ogólny obraz rozwiązania i o wiele bardziej zrozumiale komunikowane są intencje.
O wiele rozsądniejsze jest nauczenie się nowoczesnego C++ i dopiero później poszerzenie kompetencji o C. W przypadku możliwego wyboru, zawsze w projektach staram się preferować C++ nad C. Nawet dla systemów embedded.
Oczywiście w każdym z tych języków da się pisać czytelny i wydajny kod. W C jest to jednak trudniejsze i IMHO wymaga znajomości innych języków (choćby i C++) aby zrozumieć jakie konsekwencje ma nieczytelne tworzenie aplikacji.
Poza tym, warto w każdym roku poznawać nowy język programowania. To niesamowicie podnosi kompetencje nawet w tym w którym lubisz (lub jesteś zmuszony(a)) pracować.


Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:15 minut
3
Mokrowski napisał(a):

Ogólnie C odwołuje się do problemów JAK coś zrobić. Zbudowanie w nim abstrakcji które przedstawiają strawne dla człowieka struktury algorytmów/rozwiązań/modułów/... obiektów, wymaga wysiłku w trakcie którego ginie często pierwotna idea i cel rozwiązania. Z kolei C++ odwołuje się do rozwiązań CO należy zrobić. W przypadkach gdy jest to konieczne (np. wydajność, właściwości platformy...), umożliwia odwołanie się do rozwiązań JAK. Przy dobrym podejściu, w C++ nie ginie ogólny obraz rozwiązania i o wiele bardziej zrozumiale komunikowane są intencje.
O wiele rozsądniejsze jest nauczenie się nowoczesnego C++ i dopiero później poszerzenie kompetencji o C. W przypadku możliwego wyboru, zawsze w projektach staram się preferować C++ nad C. Nawet dla systemów embedded.
Oczywiście w każdym z tych języków da się pisać czytelny i wydajny kod. W C jest to jednak trudniejsze i IMHO wymaga znajomości innych języków (choćby i C++) aby zrozumieć jakie konsekwencje ma nieczytelne tworzenie aplikacji.
Poza tym, warto w każdym roku poznawać nowy język programowania. To niesamowicie podnosi kompetencje nawet w tym w którym lubisz (lub jesteś zmuszony(a)) pracować.

Oczywiście, że się z tobą nie zgadzam.
Po piesze jak ktoś mi pisze CO vs JAK to od razu mi się otwiera szufladka "Języki imperatywne vs języki deklaratywne", a C i C++ to są języki imperatywne, czyli takie, gdzie się opisuje jak coś zrobić.
Po drugie w C owszem trzeba dbać o więcej szczegółów i jest więcej dziergania, które w C++ dostaje się za darmo (np RAII, polimorfizm), ale to wcale nie oznacza, że w C nie da się pisać bardziej abstrakcyjnie. Oczywiście, że się da i ludzie to robią.
Jedyny problem to nauczyć się dobrego stylu programowania i go przestrzegać. Z nieznanych mi powodów panuje przekonanie, że w C trzeba pisać długie zawiłe funkcje i że tak ma wyglądać właśnie kod w C.

Podstawowa przewaga C++ nad C to, że C++ zapewnia tani niezawodny i prosty w użyciu polimorfizm, zarówno ten dynamiczny (funkcje wirtualne) jak i statyczny (szablony). W C też się da zrobić polimorfizm, ale jest trudne w napisaniu i utrzymywaniu.
Klasyczny przykład polimorfizmu w C to sterownik IO. Żeby można korzystać z takiego sterownika, musi on zapewnić 5 funkcji: open close seek read write, które mają ściśle określone prototypy.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
MO
"Klasyczny przykład polimorfizmu w C to sterownik IO".. możesz sprecyzować? Piszesz o FILE z stdlib czy sterownikach np. w GNU/Linux?
MarekR22
@Mokrowski: a jakie to ma znacznie dla tematu? Zresztą samo stwierdzenie nie jest moje, zerżnięte z filmiku z Uncle Bobem.
MO
@MarekR22, Ano takie ma znaczenie że chcę zrozumieć, a jak nie rozumiem to pytam :-) Nic więcej.
MO
  • Rejestracja:prawie 10 lat
  • Ostatnio:35 minut
  • Lokalizacja:Tam gdzie jest (centy)metro...
0
MarekR22 napisał(a):

Oczywiście, że się z tobą nie zgadzam.
Po piesze jak ktoś mi pisze CO vs JAK to od razu mi się otwiera szufladka "Języki imperatywne vs języki deklaratywne", a C i C++ to są języki imperatywne, czyli takie, gdzie się opisuje jak coś zrobić.
Po drugie w C owszem trzeba dbać o więcej szczegółów i jest więcej dziergania, które w C++ dostaje się za darmo (np RAII, polimorfizm), ale to wcale nie oznacza, że w C nie da się pisać bardziej abstrakcyjnie. Oczywiście, że się da i ludzie to robią.
Jedyny problem to nauczyć się dobrego stylu programowania i go przestrzegać. Z nieznanych mi powodów panuje przekonanie, że w C trzeba pisać długie zawiłe funkcje i że tak ma wyglądać właśnie kod w C.

Podstawowa przewaga C++ nad C to, że C++ zapewnia tani niezawodny i prosty w użyciu polimorfizm, zarówno ten dynamiczny (funkcje wirtualne) jak i statyczny (szablony). W C też się da zrobić polimorfizm, ale jest trudne w napisaniu i utrzymywaniu.
Klasyczny przykład polimorfizmu w C to sterownik IO. Żeby można korzystać z takiego sterownika, musi on zapewnić 5 funkcji: open close seek read write, które mają ściśle określone prototypy.

Oczywiście zgadzam się że ze mną się nie zgadzasz ba.. nawet będę zobowiązany :) I to nawet bez skupienia się jaka szufladka Ci się otwiera. Zwróć uwagę, napisałem że w każdym języku da się pisać czytelnie a do CO/JAK użyłem "ogólnie". Bez odnoszenia się do paradygmatu proceduralny kontra deklaratywny. C ma mniej narzędzi i trudniejszych w użyciu by cel "CO" w kodzie osiągnąć a narzędzia te w większym stopniu bazują na wiedzy o platformie którą powinna posiadać osoba programująca. Wiedza ta, jak sądzę, powinna być (w wielu przypadkach) złożona na barki kompilatora i bibliotek. Czego w mojej ocenie C (vide np. obsługa stringów, automatyczne promocje do int czy float do double, ubogie i żle zaprojektowane przestrzenie nazewnicze, konieczność masowego stosowania makr w bardziej wymagających przypadkach, dalej nie rozwiązany problem precyzyjnej definicji typów atomowych) nie robi zadowalająco.
Wymaganie "to się naucz dobrze i czytelnie programować", to nie jedyny wymiar. Ważny, zgoda.. ale nie jedyny. W mojej ocenie, za daleko idące uproszczenie. Często decyduje szybsze i czytelniejsze osiągnięcie efektu przy takim samym kodzie runtime i zrozumienie intencji przez inne osoby "świeże w projekcie". A tu nowoczesne C++ oferuje już widoczne benefity tak w systemach głównego nurtu jak i embedded. Także co do "szczelniejszego" obsługiwania typów które w C trzeba uzupełniać idiomami (np. opakowanie enum strukturą by osiągnąć uszczelnienie typu i usunięcie nazwy elementu enum z przestrzeni nazewniczej, podpieranie się rozszerzeniem kompilatora by uzyskać offset do struktury mając wskaźnik na pole, itp.. ), oraz jaśniejsze i łatwiejsze przekazanie intencji ze strony programującego do kompilatora bez sztuczek void * (uproszczenie).
Dziś z perspektywy embedded w C++ polimorfizm dynamiczny, nie jest aż tak istotny (platformy classic) w porównaniu do elastycznego stosowania szablonów. Na a co do szablonów, C nie ma nic co może pomóc w generowaniu kodu (nie... makra nie....). Statyczny polimorfizm, jak najbardziej w C++ przydatny (pomijając problemy jakie generuje przy utrzymaniu stabilnego ABI)
Stąd jeśli mam wybór, wybieram C++ a nie C. Jeśli go nie mam, programuję w C stosując abstrakcje które o wiele łatwiej tak osiągnąć jak się i ich nauczyć, w innych językach.
Osobiście żałuję że najpierw uczyłem się C a nie C++. Stracił bym miej czasu gdyby kolejność była odwrotna :-)


Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
PR
Jakie darmowe IDE polecasz do C++? W książce Jerzy Grębosz polecał KDEvelop, jest jeszcze QT-Creator i CodeBlocks. Co do samego C to jest od 2018 roku standard C18 i on chyba coś dodaje względem standardu C11?
MO
Ostatnie istotne zmiany i rozszerzenia, były w standardzie C11. Technicznie... standard C18 zawiera usunięcie zgłoszonych błędów DR. Tu masz listę: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2244.htm Implementację nowości przesunięto do C2x. Z darmowych, polecam Eclipse. Nie ukrywam że ma problemy (praca indeksera). Niemniej jednak obsługuje szerokie spektrum rozszerzeń oraz platform embedded. Jeśli wiesz czego chcesz, to bez opłat można używać także: https://cevelop.com/ Niezłe wtyczki np. do analizy szablonów.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)