C vs. C ++

C vs. C ++

Jest to obiektywne porównanie aplikacji, użycia i charakterystyki języka C I C++. Omówiono również pochodzenie i trajektorię rozwoju dwóch języków programowania.

Wykres porównania

Różnice - podobieństwa - C w porównaniu z wykresem porównawczym C ++
CC++
  • Obecna ocena to 4.01/5
  • 1
  • 2
  • 3
  • 4
  • 5
(412 ocen)
  • Obecna ocena to 4.12/5
  • 1
  • 2
  • 3
  • 4
  • 5
(412 ocen)
Zaprojektowany przez Dennis Ritchie BJARNE STOUSTRUP
Zbieranie śmieci Podręcznik; umożliwia lepsze zarządzanie pamięcią. Brak GC dostępnych w standardowej bibliotece C ++ (STD). Jednak STD zapewnia wydajne i deterministyczne sposoby zarządzania zasobami, takimi jak własność obiektów i liczenie referencyjne.
Wpływem B (BCPL, CPL), Algol 68, montaż C, Simula, Ada 83, Algol 68, Clu, ML
Pojawił się w 1972 1985
Zajęcia Zamiast tego wykorzystuje struktury, a tym samym nadaje większą wolność do korzystania z wewnętrznych elementów projektu klasa i struktura
OOP (programowanie obiektowe) Nie wbudowane; swoboda konfigurowania struktur do działania jak obiekty. Brak możliwości deklarowania enkapsulacji. Wbudowany; rozmiar i układ pamięci obiektów jest deterministyczna. Połączenia funkcji wirtualnych można wykonać bez VTABLE za pośrednictwem CRTP.
Główne wdrożenia GCC, MSVC, Borland C, Watcom C Kolekcja kompilatora GNU, Microsoft Visual C ++, Borland C ++ Builder, kompilator Intel C ++, LLVM/Clang
Pisanie dyscypliny Statyczny, słaby Statyczny, silny, niebezpieczny, mianujący
Block Comments Delimiter /* I */ /* I */
Terminatory instrukcji ; ;
Wbudowane komentarze delimiter // //
Wpływ AWK, CSH, C ++, C#, CORSIVE-C, BITC, D, CONSURREnt C, Java, JavaScript, Limbo, Perl, Php Ada 95, C#, Java, Php, D, Aikido
Zwykłe rozszerzenia nazwy pliku .C .CC, .CPP, .cxx, .H, .Hh, .HPP
Paradygmaty Impotemat (proceduralny) język wdrażania systemów Multi-paradigm, obiektowy, ogólny, proceduralny, funkcjonalny, meta
Tablice dynamicznie rozmiar NIE NIE
Platformy Prawie wszystko na planecie; wymaga rekompilacji Prawie wszystko, w tym platformy oparte na systemie operacyjnym i nieistnie
Prędkość C Aplikacje są szybsze do kompilacji i wykonania niż aplikacje C ++ +-5% w porównaniu z C, jeśli wiesz, jak dobrze wykorzystać C++. Wydajność programów C ++ i C może być często równa, ponieważ kompilatory dla obu języków są dojrzałe.
Przepływ wykonania Od góry do dołu Od góry do dołu
Programowanie-Include #włączać #włączać
Typ programowania Brak rodzimego typu ciągów; często deklarowane jako szereg znaków Tablica, std :: ciąg
Wpisowanie /wyjście programowania Scanf dla wejścia; printf dla wyjścia iostream, fstream (std :: cin, std :: cout)
Kod Opracowane do natywnych plików wykonywalnych za pomocą kompilatora takiego jak BCC. Opracowane do natywnych plików wykonywalnych
Typ języka Język zorientowany na procedurę Multi-paradygmat język zorientowany na obiekt
Opracowany przez Dennis Ritchie i Bell Labs BJARNE STOUSTRUP
Zorientowany na obiekt Nie natywnie Tak
Programowanie ogólne NIE Tak
Programowanie proceduralne Tak Tak
Programowanie funkcjonalne Tak Częściowy
Metaprogramowanie NIE Tak
Odbicie NIE NIE
Obsługiwane wielowymiarowe tablice Tak Tak
Platforma Każdy, kto ma kompilator Każdy, kto ma kompilator

Początki C i C++

Dennis Ritchie z Bell Labs zaprojektował C, język programowania komputerowego ogólnego przeznaczenia w 1972 r. C jest głównie używany do programowania oprogramowania systemowego, ale jest również bardzo przydatny do tworzenia ogólnego oprogramowania do aplikacji. Niektóre przymiotniki używane do opisu C to język strukturalny, imperatyw i proceduralny.

C ++ (pierwotnie nazwany „C z klasami” i nadal znany jako nadbudowa C w kółkach komputerowych) został opracowany jako wzmocnienie C przez Bjarne Stroustrup w 1983 roku w Bell Labs. Stroustrup, w 1979 roku, rozpoczął od dodania klas, funkcji wirtualnych, przeciążenia operatora, wielokrotnego dziedziczenia, szablonów, obsługi wyjątków itp. Standard języka programowania C ++ został ratyfikowany jako ISO/IEC 14882: 1998 w 1998 r., A bieżącą wersję jest wersja 2003, ISO/IEC 14882: 2003, która jest w rzeczywistości poprawioną wersją C ++ 1998. „Biblioteka Raport Techniczny 1”, wydany w 2005 r. Podaje szczegółowe informacje na temat rozszerzeń standardowej biblioteki bez bycia częścią wersji Standar. Nowa wersja standardu (nieformalnie znana jako C ++ 0x) jest w trakcie rozwoju. C ++ jest bardzo udanym językiem programowania komercyjnego od 1990 roku. Chociaż C ++ jest wolny od opłat licencyjnych, jego dokumentacja nie jest dostępna.

Wykorzystanie C vs. C++

C okazał się bardzo przydatny w uruchamianiu aplikacji zakodowanych w języku asemblera ze względu na jego mocne strony, takie jak prosty kompilator, niższe poziomy dostępu pamięci, niższy obsługa czasu wykonywania i wydajne konstruowanie języka, który był zsynchronizowany z instrukcjami sprzętowymi. Innym z jego kredytów jest to, że jest to wysoce przenośne (kompatybilne z różnymi systemami operacyjnymi i platformami) z bardzo minimalnymi zmianami kodu źródłowego. W ten sposób umożliwił zdalne operacje i niezależność od sprzętu. C jest również zgodne z różnymi standardami, dzięki czemu działa ze wszystkim.

C ++ jest znany jako język średniego poziomu. Ze względu na fakt, że C ++ obejmuje zarówno funkcje językowe wysokiego poziomu, jak i niskiego poziomu. Niektóre przymiotniki używane do opisania C ++ to statyczne pisanie, swobodne, multi-paradigm i wspierające programowanie proceduralne.

Dystrypt, podczas programowania dla jego pH.Teza d, stwierdzono, że język Simula miał cechy wysokiego poziomu pomocne w rozwoju dużego oprogramowania, ale był zbyt wolny do praktycznego użytku, podczas gdy BCPL (język) był szybki, ale zbyt niski, a zatem nieodpowiedni w przypadku rozwoju dużego oprogramowania. W Bell Labs musiał przeanalizować jądro UNIX w odniesieniu do obliczeń rozproszonych, które wywołały dalsze problemy i postanowił wzmocnić C (ze względu na jego ultra przenośną naturę) z cechami Simula. C ++ został utworzony w 1983 r. Z dodatkowymi funkcjami, takimi jak funkcje wirtualne, nazwa funkcji i przeciążenie operatora, referencje, stałe, kontrolowana przez użytkownika pamięć o wolnym sklepie, ulepszone kontrole typu i komentarze jednokierunkowe z dwoma ukośnikami do przodu (//). CFRONT (wersja komercyjna) została wydana w 1985 r. W 1985 r. Następnie wydano C ++ 2.0 w 1989 r. Z funkcjami takimi jak wiele dziedzictwa, klasy abstrakcyjne, funkcje statycznych członków, funkcje członków const i członków chronionych. Funkcje takie jak szablony, wyjątki, przestrzenie nazw, nowe obsady i typ boolean dodano post 1990.

Wraz z językiem jego biblioteka również ewoluowała, z kilkoma dodatkami, takimi jak biblioteka I/O Stream, standardowa biblioteka szablonów itp.

Pierwsze wydania książki K&R napisane przez Dennisa Ritchie i Briana Kernighana (oryginalna nazwa: The C Programming Language) opisuje ich wersję C jako K&R C z pełnymi specyfikacjami, podczas gdy późniejsze wydania obejmują ANSI (American National Standards Standards Instytut) C Standardy. Niektóre z opisanych istotnych cech to wprowadzenie różnych typów danych, usunięcie kilku niejednoznaczności semantycznych, pominięcie innych deklaracji funkcji itp. Nawet po wprowadzeniu ANSI C, K&R C nadal był najbardziej przenośnym językiem programowania dla programistów ze względu.

Deklaracje funkcji K&R nie zawierały żadnych informacji o argumentach funkcji prowadzących do niewykonania kontroli typu parametru funkcji, chociaż niektórzy kompilatorzy wydali komunikat ostrzegawczy, jeśli funkcja lokalna została wywołana z niewłaściwą liczbą argumentów lub jeśli wiele wywołanych funkcji zewnętrznej używanej funkcji zewnętrznej używanej Różna liczba argumentów. Narzędzia takie jak narzędzie Lint UNIX zostały utworzone do sprawdzania spójności funkcji używanych w wielu plikach źródłowych.

Charakterystyka języka

Charakterystyka c

Niektóre z ważnych cech C są następujące:

  1. Ustrukturyzowane urządzenia do programowania
  2. Potwierdzanie tradycji Algol
  3. Ocena zwarcia - Wykorzystanie tylko jednego operandu, jeśli wynik można określić sam
  4. System pisania statycznego do unikania niezamierzonych operacji
  5. Wartość przekazana parametry o znaczeniu dla wartości wskaźnika przechodzenia
  6. Heterogeniczna kombinacja danych i manipulacja
  7. Zarezerwowane słowa kluczowe i tekst źródłowy swobodny
  8. Większa liczba operatorów złożonych, takich jak +=, ++
  9. Ogromna zmienna pojemność kryjówki, choć definicje funkcji nie są w stanie
  10. Postać - użycie liczb całkowitych podobne do języka asemblera
  11. Dostęp do pamięci komputera za pośrednictwem adresów komputerowych za pośrednictwem adresów maszynowych i wpisanych wskaźników
  12. Wskaźniki funkcji umożliwiają podstawowe formy zamknięcia i polimorficznego środowiska wykonawczego
  13. Wskaźnik arytmetyczny indeksowanie tablicy (pojęcie wtórne)
  14. Standaryzowany procesor do definiowania makr, w tym pliki kodu źródłowego i kompilacje warunkowe
  15. Złożone funkcje wejściowe/wyjściowe i matematyczne o spójnej delegacji do procedur bibliotecznych
  16. Składnia taka sama jak „B” (poprzednik C), ale różni się od algol e.G.: … Zastąpiony początek… koniec, && i || zastąpione i i lub, które
  17. Podczas gdy B używane i i | W obu znaczeniach C wyróżniło ich składniowo od operatorów bitowych
  18. Podobieństwa do Fortran E.G: Znak równości do przypisania (kopiowanie) i dwa kolejne równe podpisie do testu dla równości (porównaj z równaniem) lub równe podpisie w podstawowym)

Inne nieoficjalne funkcje dodane z czasem to:

  1. Funkcje puste
  2. Funkcje zwracające typy struktur lub unii zamiast wskaźników
  3. Przypisania włączone dla typów danych struktur
  4. kwalifikator const do tworzenia obiektu tylko do odczytu
  5. Typy wyliczone
  6. Tworzenie narzędzia, aby uniknąć nieodłącznych problemów języka

Wkrótce C stał się wystarczająco potężny, aby jądro UNIX (napisane w języku asemblera), co czyni go jednym z pierwszych jądra OS napisanego w języku oprócz języków montażowych.

Charakterystyka c++

  1. C ++ został zaprojektowany jako statycznie wpisany, ogólny język, który jest tak wydajny i przenośny jak C
  2. C ++ został zaprojektowany do bezpośredniego i kompleksowego obsługi wielu stylów programowania (programowanie proceduralne, abstrakcja danych, programowanie obiektowe i programowanie ogólne)
  3. C ++ został zaprojektowany w celu zapewnienia wyboru programisty, nawet jeśli umożliwia to programista wybór niepoprawnego wyboru
  4. C ++ jest tak kompatybilny z C, jak to możliwe, zapewniając płynne przejście od C
  5. C ++ unika funkcji, które są specyficzne dla platformy lub nie ogólny cel
  6. C ++ nie ponosi kosztów, które nie są używane
  7. C ++ został zaprojektowany do funkcjonowania bez wyrafinowanego środowiska programowania

Polimorfizm, jedna z najważniejszych cech C ++, umożliwia wdrożenia z jedną interfazą i dla obiektów działających zgodnie z okolicznościami. C ++ obsługuje zarówno polimorfizmy statyczne (czas kompilacji), jak i dynamiczne (czas wykonywania). Polimorfizm w czasie kompilacji nie pozwala na określone decyzje w czasie wykonywania, podczas gdy polimorfizm w czasie wykonywania zazwyczaj ponosi karę wyników. C ++, choć uważany za superset C, istnieje kilka różnic, co powoduje, że niektóre prawidłowe kody C są nieprawidłowe w C ++ lub zachowują się inaczej w C++. Problemy takie jak C ++ definiujące nowe słowa kluczowe, a mianowicie nowe i klasowe, które są używane jako identyfikatory w C. Kody C i C ++ mogą być mieszane przez deklarowanie dowolnego kodu C, który ma być wywołany/używany w C ++ z połączeniem C i umieszczając go w bloku zewnętrznym „C” / * C */.

Rozwój w dwóch językach

Z czasem standaryzacja stała się coraz ważniejsza z powodu dużej liczby rozszerzeń i losowej biblioteki o rosnącej popularności języka i braku precyzyjnego wdrożenia kompilatorów zgodnie ze specyfikacjami. Jednym z celów procesu standaryzacji C było wytworzenie superset K&R C, zawierające wiele nieoficjalnych cech wprowadzonych później. Jednak Komitet Standardów obejmował kilka nowych funkcji, takich jak prototypy funkcyjne, wskaźniki pustki, wsparcie dla międzynarodowych zestawów postaci i lokalizacji oraz bardziej zdolny preprocesor. Zwiększono również składnię deklaracji parametrów. Po lat 70. C zastąpił podstawowy jako wiodący język programowania mikroprocesora i stał się popularny wraz z współpracą z komputerami IBM. Tymczasem Bjarne Stroustrup i inni w Bell Labs rozpoczęli pracę nad stworzeniem C ++, który dodał konstrukty języka programowania zorientowanego na obiekt. Ponadto ANSI utworzyło komitet w 1983 r. Zatytułowany X3J11, w celu ustalenia standardowej specyfikacji C, aw 1989 r. Standard został ratyfikowany jako ANSI X3.159-1989 „Język programowania C.„Jest to wersja C, która jest często określana jako ANSI C, standard C lub C89. C90, wprowadzony w 1990 r., Był AME jako C89 z wyjątkiem kilku drobnych zmian. Podczas gdy C ++ ewoluował szybko, C pozostał statyczny do 1995 r., Kiedy poprawka normatywna 1 stworzyła nowy standard, który uległa dalszej rewizji, co prowadzi do publikacji ISO 9899: 1999 w 1999 r. Ten standard jest powszechnie określany jako „C99.„Został przyjęty jako standard ANSI w marcu 2000 roku. Niektóre nowsze funkcje są wspomniane poniżej:

  • Funkcje inline
  • Zdolność do deklarowania zmiennych w dowolnym miejscu, zamiast tylko po innej deklaracji lub na początku oświadczenia złożonego
  • Nowe typy danych, takie jak długi int, opcjonalnie rozszerzone typy liczb całkowitych, jawny typ danych logicznych i typ złożony w celu oznaczenia liczb złożonych
  • Długości tablicy mogą być zmienne
  • Komentarze jednoladowe zaczynające się od // obsługiwane
  • Funkcje biblioteczne takie jak snprintf
  • Nowe pliki nagłówka, takie jak stdbool.H i inttypy.H
  • Funkcje matematyczne typu (tgmath.H)
  • Ulepszone wsparcie dla pływającego punktu IEEE
  • Wyznaczone inicjalizatory
  • Literały złożone
  • Obsługa makr zmiennych (makra zmiennej arty)

C ++, jednocześnie ewoluując, aby spełnić wymagania przyszłości, nowsza wersja o nazwie C ++ 0x oznacza, że ​​ma się wydawać przed 2010 rokiem. Wskazania sugerują, że C ++ będzie nadal wykorzystać swój wieloparadygmat charakter, a godne uwagi ulepszenia mogą być natywnym wsparciem dla wątków i koncepcji, dzięki czemu praca z Templetes jest łatwiejsza. Bardziej kontrowersyjnie dodanie kolekcji śmieci jest obecnie w ciężkiej dyskusji. Grupa o nazwie Boost.Org, który doradza Komitetowi Standardów C ++ na temat dobrych cech i wymaganych ulepszeń, pracuje intensywnie, aby opracować C ++ w swojej obecnej formie z rozszerzonymi zdolnościami funkcjonalnymi i metaprogramowymi.

W projekcie i ewolucji C ++ (1994) Bjarne Stroustrup opisuje pewne zasady, których użył do projektowania C++. Znajomość zasad pomaga zrozumieć, dlaczego C ++ jest taki, jaki jest. Znacznie więcej szczegółów można znaleźć w projektowaniu i ewolucji C++.

Wpływy

Wpływ C można prześledzić do dzieł takich jak AWK, CSH, C ++, C#, D, Conmitrive-C, Concurrent-C, Bitc, Java i JavaScript, Limbo, Perl, Php itp. Niektóre z głównych wdrożeń C obejmują Borland C, Watcom C, GCC i MSVC. C ++, na jego zasługę wpłynęło na inne prace, takie jak D, C#, ADA 95, Aikido, Java i PHP.

Krytyka C vs. C++

Pomimo swojej popularności, C został skrytykowany za to, że pożądane operacje były zbyt trudne do osiągnięcia, a niepożądane operacje były zbyt łatwe do przypadkowego przywołania, tym samym obejmując więcej umiejętności programistów, doświadczenia, wysiłku i dbałości o szczegóły niż inne języki programowania w celu bezpiecznego i skutecznego użytkowania języka.

Kiedy języki obiektowe stały się popularne, C ++ było rozszerzeniem C, które zapewniało obiektowe możliwości z C ++ pierwotnie zaimplementowanym jako preprocesor-kod źródłowy został przetłumaczony na C, a następnie opracowany z kompilatorem C kompilatorem C.

C ++ pochodzący z C, również odziedziczy większość krytyki wyrównanych przeciwko C. Ale ponieważ język jest w rzeczywistości składem dwóch różnych języków, wraz z ładunkiem ogromnych programów, często kończą się kompilacją ogromną i nieodpowiednią pod względem czystego rozmiaru. Kiedy ten problem zostanie unikający, wyłączając niektóre kody grzywne, został ponownie skrytykowany za przegraną na kilku ważnych narzędzia. Twórca C ++ uważa również, że C ++ jest uzasadniony jako złożony język, ponieważ współczesne wymagania dotyczące programowania również wzrosły w ogromny sposób w porównaniu z przeszłością.