C vs. C ++
- 3267
- 933
- Emilia Rudziński
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 | C++ | |
---|---|---|
|
| |
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:
- Ustrukturyzowane urządzenia do programowania
- Potwierdzanie tradycji Algol
- Ocena zwarcia - Wykorzystanie tylko jednego operandu, jeśli wynik można określić sam
- System pisania statycznego do unikania niezamierzonych operacji
- Wartość przekazana parametry o znaczeniu dla wartości wskaźnika przechodzenia
- Heterogeniczna kombinacja danych i manipulacja
- Zarezerwowane słowa kluczowe i tekst źródłowy swobodny
- Większa liczba operatorów złożonych, takich jak +=, ++
- Ogromna zmienna pojemność kryjówki, choć definicje funkcji nie są w stanie
- Postać - użycie liczb całkowitych podobne do języka asemblera
- Dostęp do pamięci komputera za pośrednictwem adresów komputerowych za pośrednictwem adresów maszynowych i wpisanych wskaźników
- Wskaźniki funkcji umożliwiają podstawowe formy zamknięcia i polimorficznego środowiska wykonawczego
- Wskaźnik arytmetyczny indeksowanie tablicy (pojęcie wtórne)
- Standaryzowany procesor do definiowania makr, w tym pliki kodu źródłowego i kompilacje warunkowe
- Złożone funkcje wejściowe/wyjściowe i matematyczne o spójnej delegacji do procedur bibliotecznych
- 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
- Podczas gdy B używane i i | W obu znaczeniach C wyróżniło ich składniowo od operatorów bitowych
- 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:
- Funkcje puste
- Funkcje zwracające typy struktur lub unii zamiast wskaźników
- Przypisania włączone dla typów danych struktur
- kwalifikator const do tworzenia obiektu tylko do odczytu
- Typy wyliczone
- 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++
- C ++ został zaprojektowany jako statycznie wpisany, ogólny język, który jest tak wydajny i przenośny jak C
- C ++ został zaprojektowany do bezpośredniego i kompleksowego obsługi wielu stylów programowania (programowanie proceduralne, abstrakcja danych, programowanie obiektowe i programowanie ogólne)
- C ++ został zaprojektowany w celu zapewnienia wyboru programisty, nawet jeśli umożliwia to programista wybór niepoprawnego wyboru
- C ++ jest tak kompatybilny z C, jak to możliwe, zapewniając płynne przejście od C
- C ++ unika funkcji, które są specyficzne dla platformy lub nie ogólny cel
- C ++ nie ponosi kosztów, które nie są używane
- 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ą.