• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C a C++ (czy programista C++ musi znać też C ?)

Object Storage Arubacloud
0 głosów
928 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
edycja 11 listopada 2017 przez Jakub 0

Hej, pytanie jest dokładnie takie jak w temacie. Wiem że każdy powie że jak się zna C++ to tym bardziej umie się automatyczne C. Ale jest wiele różnic: np w C nie mamy new i delete tylko co innego (jakieś malloc, alloc itd...), W C zamiast string musimy używać char ** (to dla mnie ciężkie bo nie cierpię wskaźników, a zwłaszcza wskazujących na wskaźnik :/) . Zadałem to pytanie bo często kiedy patrze na jakieś przykłady projektów zapisanych rzekomo w C++, to mam tam masę przestarzałych jak na cpp instrukcji z C. (wiem że C jest oczywiście ważny w wielu dziedzinach). Czy programista C++ powinien znać język C? Często przeglądając czyjś kod bardzo się męczę bo muszę szukać informacji co oznacza dana instrukcja ze starszego języka... Dziękuje za pomoc i pozdrawiam :)

*edit

Tu alokacja tablicy w cpp:

int *arr = new int[10];

Atu w c :

int *arr = (int*) malloc(10 * sizeof(*arr));

Nie rozumiem czemu często ktoś kto zna C++ używa zapisu z C

 

3 odpowiedzi

+5 głosów
odpowiedź 11 listopada 2017 przez mokrowski Mędrzec (155,460 p.)
wybrane 12 listopada 2017 przez Jakub 0
 
Najlepsza
Problem jest w definicji słowa "musi". Z jednej strony sam język C++ deklaruje kompatybilność z konstrukcjami w C (nie wszystkimi ale to i tak mały %). Z drugiej dostarcza tak wysoki poziom abstrakcji że bez uzasadnionych powodów nikt nie ma ochoty "schodzić do poziomu C". Teoretycznie więc... nie musi... ale ... :-/

Problem tylko z tymi powodami....

Często większe projekty w C++ mają swoją historię tak w przebiegu standardów w jakich były pisane jak i kompetencjach osób które się nim posługiwały. Kod zastany może mieć "kwiatki" C-podobne a jeśli płacą Ci za jego utrzymanie... nie masz wyjścia.

Bywa także i taka sytuacja gdzie potrzebna biblioteka jest napisana w C i trzeba świadomie umieć jej użyć co często kończy się przygotowaniem danych "pod C". A tu samo wywołanie (zagadnienia konsolidatora) jak i dane (struktury danych), mogą się różnić pomiędzy C i C++.

Czasem projekt jest mocno związany z mechanizmami systemowymi a tam króluje C (przynajmniej systemy Posix) i nie masz wyjścia.

W przypadku urządzeń wbudowanych programując w C++, powinieneś mieć głęboką świadomość mechanizmów których używa sam język C++ do budowania abstrakcji. Czasem są one nieakceptowalne (ze względu na zajętość pamięci, gospodarkę zasobami...). Wtedy świadomie schodzi się do mechanizmów w czystym C. Np. na platformach MCU ARM, warstwa abstrakcji ( CMSIS ), dostarczana jest w czystym C i jest to standard.

Tak więc.. sam sobie odpowiedz :-)
komentarz 12 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Dzięki za odpowiedź, kiedyś interesowały mnie takie platformy jak Arduino czy

Mikrokontrolery. Do ich programowania używa się raczej C. Czy gdybym chciał się tym zająć to musiał bym się uczyć C  od podstaw?
1
komentarz 12 listopada 2017 przez Bondrusiek Maniak (61,370 p.)
Arduino zostało stworzone po to aby ułatwić pracę z mikrokontrolerami. Na Arduino w którym programuje się na tym urządzeniu przypomina język C. Jeśli masz jakąś wiedzę z programowania np C++ to spokojnie sobie dasz radę
komentarz 12 listopada 2017 przez mokrowski Mędrzec (155,460 p.)
Arduino napisane jest w C++. Stosuje jednak wiele ułatwień i nie jest raczej reprezentatywne dla praktyki programowania na MCU (podobnie jak biblioteka MBED). Programując na MCU "nasiąkniesz" C. To przychodzi naturalnie i nie ma co się specjalnie nastawić na ciężki proces nauki.

Osobiście na MCU programuję w C++.
+4 głosów
odpowiedź 11 listopada 2017 przez Marchello Początkujący (300 p.)
Nie musi. Chociaż podejrzewam, że w przypadku niektórych branż dużym plusem jest znajomość języka C (obok znajomości C++).
+2 głosów
odpowiedź 11 listopada 2017 przez Patryk Krajewski Nałogowiec (26,170 p.)

Nie musi. Tak w o góle to skąd masz ten przykład? Ja to jeszcze w żadnym kodzie C++ nie widziałem takiej instrukcji

int *arr = (int*) malloc(10 * sizeof(*arr));

A taką instrukcję

int *arr = new int[10];

w większości przypadków można zastąpić jakimś kontenerem, który jest lepszy.

 

1
komentarz 11 listopada 2017 przez Munvik Dyskutant (9,350 p.)
Ten pierwszy jest z C
1
komentarz 11 listopada 2017 przez Patryk Krajewski Nałogowiec (26,170 p.)
Wiem o tym, ale autor postu napisał, że ktoś używał takiego w C++
1
komentarz 11 listopada 2017 przez Munvik Dyskutant (9,350 p.)
Aha, autor zedytował :)
komentarz 12 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Nie zedytowałem, często wiedzę takie cuda w kodzie C++, tego już nie mogę sobie przypomnieć gdzie znalazłem ba mam tylko kod do testów. Nie wykluczone że może się pomyliłem i poradnik dotyczył stricte C. Jednak z wielu przyzwyczajeń niektórzy chyba wolą używać składni z C (jak są z nią zżyci).

Podobne pytania

0 głosów
3 odpowiedzi 1,808 wizyt
pytanie zadane 26 października 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
3 odpowiedzi 634 wizyt
pytanie zadane 23 lipca 2019 w C i C++ przez KosaTV Obywatel (1,260 p.)
0 głosów
0 odpowiedzi 652 wizyt
pytanie zadane 29 kwietnia 2022 w C i C++ przez polandonion Mądrala (7,040 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...