C plus plus Sprachstandard. C plus plus Sprachstandard C plus Programmiersprache

Das Buch ist eine Einführung in die Programmiersprache C++. Der Hauptunterschied zwischen diesem Buch und früheren Ausgaben von C++ für Dummies besteht darin, dass diese Ausgabe keine zusätzlichen Kenntnisse vom Leser erfordert, während frühere Ausgaben trotz der Einfachheit der Präsentation des Materials auf Kenntnissen des Lesers über die Programmiersprache C angewiesen waren , wird im Buch recht streng dargestellt, sodass der Leser, nachdem er mit Hilfe dieses Buches die Grundlagen der Programmierung in C++ erlernt hat, keine Schwierigkeiten mehr haben wird
beim weiteren Sprachenlernen.
In diesem Buch erfahren Sie nicht, wie Sie für Windows programmieren oder wie Sie mit zwei Mausklicks eine schöne Benutzeroberfläche erstellen. Das darin präsentierte Material ist nicht an einen bestimmten Compiler oder ein bestimmtes Betriebssystem gebunden. Es ist unwahrscheinlich, dass es für einen professionellen Programmierer von Nutzen sein wird. Wenn Ihr Ziel jedoch tiefe Kenntnisse einer Programmiersprache sind und Sie nicht wissen, wo Sie anfangen sollen, ist dieses Buch genau das Richtige für Sie.

Was ist C++?
C++ ist eine objektorientierte Low-Level-Programmiersprache, die den ANSI- und ISO-Standards (International Standards Organization) entspricht. Objektorientiertes C++ bedeutet, dass es einen Programmierstil unterstützt, der umfangreiche Programme einfacher zu programmieren und erweiterbarer macht. Als Low-Level-Sprache kann C++ sehr effiziente Hochgeschwindigkeitsprogramme generieren.

Als objektorientierte Programmiersprache ist C++ äußerst flexibel und erweiterbar und eignet sich daher für Großprojekte. Derzeit ist C++ eine der beliebtesten Programmiersprachen für die Entwicklung von Anwendungen jeglicher Art. Die meisten modernen Programme, die auf Personalcomputern ausgeführt werden, sind in C++ geschrieben.

INHALT
INHALT 6
Einleitung 17
Teil 1. Erste Bekanntschaft mit C++ 23
Kapitel 1: Schreiben Ihres ersten Programms 25
Kapitel 2. Die Weisheit der Variablendeklaration 41
Kapitel 3: Mathematik durchführen 50
Kapitel 4: Durchführen logischer Operationen 55
Kapitel 5. Programmsteueranweisungen 66
Teil 2. Funktionale Programmierer werden 79
Kapitel 6: Funktionen erstellen 81
Kapitel 7. Speichern von Sequenzen in Arrays 92
Kapitel 8. Erste Schritte mit Zeigern in C++ 105
Kapitel 9. Zweite Bekanntschaft mit Zeigern 117
Kapitel 10. Debuggen von C++-Programmen 128
Teil 3: Einführung in die Klassen 143
Kapitel 11: Einführung in die objektorientierte Programmierung 145
Kapitel 12. Klassen in C++ 149
Kapitel 13. Arbeiten mit Klassen 154
Kapitel 14. Zeiger auf Objekte 167
Kapitel 15. Geschützte Klassenmitglieder: Bitte nicht stören! 181
Kapitel 16. Objekte erstellen und löschen 188
Kapitel 17. Argumentation des Designs 198
Kapitel 18. Kopierkonstruktor 213
Kapitel 19. Statische Mitglieder 224
Teil 4. Vererbung 231
Kapitel 20. Klassenvererbung 233
Kapitel 21: Einführung in virtuelle Elementfunktionen: Sind sie real 240
Kapitel 22. Klassenzerlegung 249
Teil 5. Nützliche Funktionen 269
Kapitel 23. Zuweisungsoperator 271
Kapitel 24: Verwendung von I/O-Streams 277
Kapitel 25: Umgang mit Fehlern und Ausnahmen 290
Kapitel 26. Mehrfachvererbung 298
Kapitel 27. C++-Vorlagen 308
Kapitel 28. Standardvorlagenbibliothek 317
Teil 6. Magnificent Ten 329
Kapitel 29. Zehn Möglichkeiten, Fehler zu vermeiden 331
Kapitel 30. Die zehn wichtigsten Funktionen von Dev-C++ 336
Kapitel 31. Programm BUDGET 343
Anwendung. Inhalt der mitgelieferten CD 379
Piktogramme
Sachregister 380.


Laden Sie das E-Book kostenlos in einem praktischen Format herunter, schauen Sie es sich an und lesen Sie:
Laden Sie das Buch „C++ für Dummies“ von Stefan Randy Davis – fileskachat.com – schnell und kostenlos herunter.

Die Sprache C wurde zwischen 1969 und 1973 von Dennis Ritchie und Brian Kernighan entwickelt. C sollte das UNIX-Betriebssystem implementieren, fand aber später breitere Anwendungen.

Derzeit belegt Xi einen stabilen zweiten Platz.

Warum brauchst du C?

Wir haben bereits über die Bedeutung der C-Sprache gesprochen, also gehen wir die wichtigsten Punkte durch.

Zunächst einmal ist die meiste Systemsoftware in der Sprache C geschrieben. Der Kernel des beliebtesten Open-Source-Linux-Betriebssystems wurde in C geschrieben.

Ein großer Vorteil von C besteht darin, dass jede Anweisung der Sprache direkt und verständlich in Maschinencode übersetzt wird. Es wird genau der Code ausgeführt, den der Programmierer auf dem Bildschirm sieht. In modernen Compilern können sie jedoch natürlich verwendet werden, allerdings in einer Minderheit der Fälle.

Es ist auch erwähnenswert, dass die beliebtesten Programmiersprachen auf die eine oder andere Weise mit C verwandt sind. So haben beispielsweise Java und C# eine sogenannte C-ähnliche Syntax, und C++ und Objective-C sind in der einen oder anderen Weise C-Erweiterungen.

Wenn Sie Code in einer dynamischen Programmiersprache schreiben, sei es PHP, JavaScript oder Python, dann sind der Interpreter, die Laufzeit und die meisten Bibliotheken hauptsächlich in C geschrieben. Um die Verhaltensmerkmale einer bestimmten Sprache zu verstehen, müssen Sie daher die Merkmale der C-Sprache kennen. Und wenn Sie über die Fähigkeiten Ihrer Programmiersprache hinausgegangen sind, werden Sie, bevor Sie es merken, mit dem Schreiben einer neuen Erweiterung in C beginnen.

Darüber hinaus ermöglicht die Kenntnis von C dem Programmierer, alle Vorzüge höherer Programmiersprachen sowie die Einschränkungen, die sich bei ihrer Verwendung ergeben, wirklich zu schätzen.

Und das sind die Gründe, C zu lernen.

Was weiter?

Nachdem wir nun herausgefunden haben, warum wir C brauchen, stellt sich die logische Frage: „Wie lernt man es?“

Buch „Programmiersprache C“

Niemand kann Ihnen besser über C erzählen als die Erfinder dieser Programmiersprache. Daher ist das Buch „The C Programming Language“, geschrieben von Dennis Ritchie und Brian Kernighan, ein Muss für jeden, der sich irgendwie entschieden hat, sein Leben mit C zu verbinden.

Kurs „Der komplette C-Entwicklerkurs – Erstellen Sie 7 spannende Projekte“

Der Kurs behandelt sowohl grundlegende als auch fortgeschrittenere Aspekte der Sprache: Grafikprogrammierung, Speichermodelle und vieles mehr. Während des Kurses erstellen Sie 7 spannende Projekte, wie zum Beispiel ein Datenbankverwaltungssystem und Ihren eigenen Computervirus.

Der Kurs ist kostenpflichtig, aber das Geld definitiv wert. Als nächstes bieten wir kostenlose Materialien an.

Der berühmte Harvard-Kurs „CS50“

Jetzt spricht er. CS50 bringt Ihnen vor allem das Denken bei. Zu den Themen, die Sie im Kurs behandeln werden, gehören Abstraktion, Algorithmen, Datenstrukturen, Kapselung, Ressourcenmanagement, Sicherheit, Softwareentwicklung und Webentwicklung. Die von Ihnen verwendeten Sprachen sind C, Python, SQL und JavaScript sowie HTML und CSS. Und das Wichtigste: Der Kurs ist kostenlos.

Kostenloser Kurs „C-Tutorial für Anfänger“

Mit diesem Programm erlernen Sie die Grundlagen der C-Sprache, verstehen Zeiger, Strukturen und Vereinigungen und lernen, einfache Programme zu schreiben.

Kostenlose Online-C-Kurse von zwei führenden finnischen Universitäten

Enthält umfassende Materialien und viele Programmierübungen sowie ein automatisiertes Testsystem.

Der Kurs wurde gemeinsam von der Aalto-Universität und der Universität Helsinki entwickelt (die gleiche, an der Linus Torvalds einst studierte), und der darin erläuterte Stoff ist eine vollständige Vervielfältigung der an diesen Universitäten angebotenen C-Kurse.

Buch „C auf die harte Tour lernen“

Das Buch wird Ihnen das C beibringen, das im wirklichen Leben verwendet wird, um echte Projekte zu erstellen, und nicht abstrakte Mechanismen und pedantische Theorie. Außerdem lernen Sie einige wichtige Themen wie Algorithmen und Datenstrukturen sowie automatisiertes Testen kennen. Interessierte können die Übersetzung ins Russische finden. Tproger empfiehlt auch oft gute Programmierbücher, schauen Sie sich also um

Die Popularität der Programmiersprache C kann kaum hoch genug eingeschätzt werden, insbesondere wenn man sich ihre bisherigen Errungenschaften vor Augen führt. Wahrscheinlich weiß jeder Entwickler zumindest von seiner Existenz und hat höchstens versucht, darauf zu programmieren. C ist der Vorgänger von Sprachen wie C++, Objective-C, C#, Java.

Microsoft wählte eine C-ähnliche Syntax, um die Muttersprache für seine .Net-Plattform zu entwickeln. Darüber hinaus sind viele Betriebssysteme in C geschrieben.

Natürlich ist C nicht perfekt: Die Erfinder der Sprache, Ken Thompson und Dennis Ritchie, haben viel Zeit damit verbracht, sie zu verfeinern. Die Standardisierung von C ist noch im Gange. Es besteht seit über 45 Jahren und wird aktiv genutzt.

Es wird oft nicht mit einer, sondern mit zwei Programmiersprachen in Verbindung gebracht – C/C++. Im Folgenden werden wir jedoch speziell auf „reines“ C eingehen.

Die Sprache C hat ihre Wurzeln in ALGOL (ALGorithmic Language), die 1958 von einem Komitee europäischer und amerikanischer Informatiker bei einem Treffen an der ETH Zürich geschaffen wurde. Die Sprache war eine Reaktion auf einige Mängel der FORTRAN-Sprache und ein Versuch, diese zu beheben. Darüber hinaus steht die Entwicklung von C in engem Zusammenhang mit der Entwicklung des Betriebssystems UNIX, an dem auch Ken Thompson und Dennis Ritchie mitgearbeitet haben.

UNIX

Das MAC-Projekt (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) begann 1963 als reines Forschungsprojekt am MIT.

Im Rahmen des MAC-Projekts wurde das Betriebssystem CTSS (Compatible Time-Sharing System) entwickelt. In der zweiten Hälfte der 60er Jahre wurden mehrere andere Time-Sharing-Systeme geschaffen, darunter BBN, DTSS, JOSS, SDC und Multiplexed Information and Computing Service (MULTICS).

Multics ist eine gemeinsame Anstrengung von MIT, Bell Telephone Laboratories (BTL) und General Electric (GE) zur Entwicklung eines Time-Sharing-Betriebssystems für den GE-645-Computer. Der letzte Computer, auf dem Multics lief, wurde am 31. Oktober 2000 heruntergefahren.

BTL gab dieses Projekt jedoch Anfang 1969 auf.

Einige seiner Mitarbeiter (Ken Thompson, Dennis Ritchie, Stu Feldman, Doug McIlroy, Bob Morris, Joe Ossanna) wollten die Arbeit alleine weiterführen. Thompson arbeitete am Spiel Space Travel auf dem GE-635. Es wurde zuerst für Multics geschrieben und dann in Fortran unter GECOS auf dem GE-635 umgeschrieben. Das Spiel simulierte die Körper des Sonnensystems und der Spieler musste das Schiff irgendwo auf einem Planeten oder Satelliten landen.

Weder die Software noch die Hardware dieses Computers waren für ein solches Spiel geeignet. Thompson suchte nach einer Alternative und schrieb das Spiel für einen verlassenen PDP-7 neu. Der Speicher bestand aus 8K 18-Bit-Wörtern, und es gab auch einen Vektoranzeigeprozessor, um für die damalige Zeit schöne Grafiken anzuzeigen.


Bild von slideshare.net

Thompson und Ritchie führten die gesamte Entwicklung im Cross-Assembler auf GE durch und übertrugen den Code auf Lochstreifen. Thompson missfiel dies ausdrücklich und begann, ein Betriebssystem für den PDP-7 zu schreiben, beginnend mit dem Dateisystem. So wurde UNIX geboren.

Thompson wollte mit allen verfügbaren Mitteln eine komfortable Computerumgebung schaffen, die nach seinem Entwurf gebaut wurde. Seine Ideen umfassten im Nachhinein offensichtlich viele Innovationen von Multics, darunter das Konzept des Prozesses als Grundlage der Verwaltung, ein baumbasiertes Dateisystem, einen Befehlsinterpreter als Benutzerprogramm, eine vereinfachte Darstellung von Textdateien und einen allgemeinen Zugriff auf Geräte.

PDP-7 UNIX markierte auch den Beginn der Hochsprache B, die von der BCPL-Sprache beeinflusst wurde. Dennis Ritchie sagte, B sei C ohne Typen. BCPL passt in 8 KB Speicher und wurde von Thompson sorgfältig neu gestaltet. B wuchs nach und nach in S. auf.


Bild von it-world.com

Bis 1973 war die Sprache C so stark geworden, dass ein Großteil des UNIX-Kernels, der ursprünglich in der Assemblersprache PDP-11/20 geschrieben war, in C umgeschrieben wurde. Es war einer der allerersten Betriebssystemkerne, die in einer anderen Sprache als der Assemblersprache geschrieben waren.

Es stellt sich heraus, dass C ein „verwandtes Produkt“ ist, das bei der Erstellung des UNIX-Betriebssystems erhalten wurde.

Xis Vorfahren

Inspiriert durch die ALGOL-60-Sprache entwickelte das Mathematiklabor der Universität Cambridge zusammen mit der Computerabteilung der Universität London 1963 die Sprache CPL (Combined Programming Language).

Die CPL-Sprache galt als schwierig, und als Reaktion darauf entwickelte Martin Richardson 1966 die BCPL-Sprache, deren Hauptzweck darin bestand, Compiler zu schreiben. Heutzutage wird es praktisch nicht mehr verwendet, aber früher spielte es aufgrund seiner guten Tragbarkeit eine wichtige Rolle.

BCPL wurde Anfang der 1970er Jahre in mehreren interessanten Projekten eingesetzt, darunter im Betriebssystem OS6 und teilweise in den aufkommenden Entwicklungen von Xerox PARC.

BCPL diente als Vorläufer der Bi (B)-Sprache, die 1969 in den bereits bekannten AT&T Bell Telephone Laboratories entwickelt wurde und Ken Thompson und Dennis Ritchie nicht weniger vertraut war.

Wie andere Betriebssysteme dieser Zeit war UNIX in Assemblersprache geschrieben. Das Debuggen von Programmen in Assembler ist eine echte Qual. Thompson entschied, dass für die Weiterentwicklung des Betriebssystems eine Hochsprache erforderlich war und entwickelte eine kleine Sprache. B. Thompson nahm die BCPL-Sprache als Grundlage. Sprache B kann man sich als C ohne Typen vorstellen.

BCPL, B und C unterscheiden sich syntaktisch in vielen Details, sind aber grundsätzlich ähnlich. Programme bestehen aus einer Folge globaler Deklarationen und Funktions-(Prozedur-)Deklarationen. In BCPL können Prozeduren verschachtelt sein, aber nicht auf nicht statische Objekte verweisen, die in ihren enthaltenden Prozeduren definiert sind. B und C umgehen diese Einschränkung, indem sie eine strengere einführen: Es gibt überhaupt keine verschachtelten Prozeduren. Jede der Sprachen (mit Ausnahme der ältesten Versionen von B) unterstützt eine separate Kompilierung und bietet Möglichkeiten zum Einbinden von Text aus benannten Dateien.

Im Gegensatz zu den weit verbreiteten Syntaxänderungen, die während der Erstellung von B vorgenommen wurden, blieb die Kernsemantik von BCPL – die Typstruktur und die Regeln zur Ausdrucksbewertung – erhalten. Beide Sprachen sind typlos bzw. haben einen einzigen Datentyp – „Wort“ oder „Zelle“, eine Menge von Bits fester Länge. Der Speicher ist in diesen Sprachen ein Array solcher Zellen, und die Bedeutung des Inhalts einer Zelle hängt von der Operation ab, die auf sie angewendet wird. Beispielsweise fügt der „+“-Operator seine Operanden einfach mithilfe der Maschinenanweisung „add“ hinzu, und auch andere arithmetische Operationen sind hinsichtlich der Bedeutung ihrer Operanden gleichgültig.

Weder BCPL, B noch C weisen Zeichendaten in der Sprache zu; Sie behandeln Strings als Vektoren von ganzen Zahlen und ergänzen die allgemeinen Regeln durch mehrere Konventionen. Sowohl in BCPL als auch in B bedeutet ein String-Literal die Adresse eines statischen Bereichs, der mit in Zellen gepackten String-Zeichen initialisiert wird.

Wie C entstand

1970 kaufte Bell Labs für das Projekt einen PDP-11-Computer. Da B bereit war, auf dem PDP-11 zu laufen, schrieb Thompson den UNIX-Teil in B neu.

Modell B und BCPL brachten jedoch einen Mehraufwand bei der Arbeit mit Zeigern mit sich: Die Regeln der Sprache, die einen Zeiger als Index in einem Array von Wörtern definierten, machten Zeiger zu Indizes von Wörtern. Jeder Zeigerzugriff während der Ausführung erzeugte eine Skalierung des Zeigers auf die vom Prozessor erwartete Byteadresse.

Daher wurde klar, dass zur Bewältigung der Zeichen- und Byteadressierung sowie zur Vorbereitung auf die bevorstehende Hardwareunterstützung für Gleitkommaberechnungen eine Typisierung erforderlich war.

Im Jahr 1971 begann Ritchie mit der Erstellung einer erweiterten Version von B. Zuerst nannte er sie NB (New B), aber als sich die Sprache stark von B unterschied, wurde der Name in C geändert. Hier ist, was Ritchie selbst darüber schrieb:

Ich wollte, dass die Struktur nicht nur ein abstraktes Objekt charakterisiert, sondern auch eine Reihe von Bits beschreibt, die aus dem Verzeichnis gelesen werden können. Wo könnte der Compiler den Zeiger auf den Namen verstecken, den die Semantik erfordert? Selbst wenn Strukturen abstrakter sein sollten und irgendwo Platz für Zeiger versteckt sein könnte, wie würde ich das technische Problem lösen, diese Zeiger korrekt zu initialisieren, wenn Speicher für ein komplexes Objekt zugewiesen wird, vielleicht eine Struktur, die Arrays enthält, die Strukturen usw. enthalten? bis zu einer beliebigen Tiefe?

Die Lösung war ein entscheidender Sprung in der Evolutionskette zwischen typlosem BCPL und typisiertem C. Sie eliminierte die Materialisierung des Zeigers im Speicher und sorgte stattdessen dafür, dass er erstellt wurde, wenn der Array-Name im Ausdruck erwähnt wurde. Eine Regel, die im heutigen C fortbesteht, besteht darin, dass Array-Werte, wenn sie in einem Ausdruck referenziert werden, in Zeiger auf das erste der Objekte konvertiert werden, aus denen dieses Array besteht.

Die zweite Neuerung, die C am deutlichsten von seinen Vorgängern unterscheidet, ist diese vollständigere Typstruktur und insbesondere seine Ausdruckskraft in der Deklarationssyntax. NB bot die Grundtypen int und char sowie deren Arrays und Zeiger darauf an, aber keine andere Möglichkeit, sie zusammenzusetzen.

Es war eine Verallgemeinerung erforderlich: Für ein Objekt jeglichen Typs sollte es möglich sein, ein neues Objekt zu beschreiben, das mehrere solcher Objekte in einem Array zusammenfasst, es von einer Funktion empfängt oder ein Zeiger darauf ist.



Bild aus der C-Sprache: M. Waite, S. Prata, D. Martin

Für jedes Objekt eines solchen zusammengesetzten Typs gab es bereits eine Möglichkeit, auf das Objekt zu zeigen, das Teil davon ist: Indizieren Sie das Array, rufen Sie eine Funktion auf, verwenden Sie den Indirektionsoperator mit dem Zeiger. Ähnliche Überlegungen führten zu einer Syntax für die Namensdeklaration, die die Syntax des Ausdrucks widerspiegelt, in dem diese Namen verwendet werden. Also

deklariert eine Ganzzahl, einen Zeiger auf eine Ganzzahl und einen Zeiger auf einen Zeiger auf eine Ganzzahl. Die Syntax dieser Deklarationen spiegelt die Tatsache wider, dass i, *pi und **ppi alle zum Typ int führen, wenn sie in einem Ausdruck verwendet werden. Auf eine ähnliche Art und Weise
deklarieren Sie eine Funktion, die eine Ganzzahl zurückgibt, eine Funktion, die einen Zeiger auf eine Ganzzahl zurückgibt, einen Zeiger auf eine Funktion, die eine Ganzzahl zurückgibt;
Deklarieren Sie ein Array von Zeigern auf eine Ganzzahl, einen Zeiger auf ein Array von Ganzzahlen.

In all diesen Fällen ähnelt die Deklaration einer Variablen ihrer Verwendung in einem Ausdruck, dessen Typ derjenige ist, der am Anfang der Deklaration steht.

70er Jahre: „Zeit der Unruhen“ und falscher Dialekte

Bis 1973 war die Sprache stabil genug, dass UNIX darin neu geschrieben werden konnte. Der Wechsel zu C brachte einen wichtigen Vorteil: Portabilität. Durch das Schreiben eines C-Compilers für jede der Maschinen bei Bell Labs konnte das Entwicklungsteam UNIX auf sie portieren.

Bezüglich der Entstehung der C-Sprache schreibt Peter Moylan in seinem Buch „The case against C“: „Was benötigt wurde, war eine Sprache, die einige der starren Regeln umgehen konnte, die in den meisten Hochsprachen eingebaut sind, und deren Einhaltung gewährleisten konnte.“ Zuverlässigkeit. Wir brauchten eine Sprache, die es uns ermöglichen würde, das zu tun, was bisher nur in Assembler oder auf Maschinencode-Ebene möglich war.“

C entwickelte sich in den 70er Jahren weiter. In den 1973–1980er Jahren wuchs die Sprache ein wenig: Die Typstruktur erhielt vorzeichenlose, lange Typen, Vereinigung und Aufzählung, Strukturen näherten sich Klassenobjekten an (nur die Notation für Literale fehlte).

Das erste Buch über C. Die von Brian Kernighan und Dennis Ritchie geschriebene und 1978 veröffentlichte Programmiersprache C ist zur Bibel der C-Programmierer geworden. Da es keinen offiziellen Standard gibt, ist dieses Buch – auch bekannt als K&R oder das „White Book“, wie C-Fans es gerne nennen – zum De-facto-Standard geworden.


Bild von learnc.info

In den 70er Jahren gab es nur wenige C-Programmierer und die meisten von ihnen waren UNIX-Benutzer. In den 80er Jahren überschritt C jedoch die engen Grenzen der UNIX-Welt. C-Compiler sind auf einer Vielzahl von Maschinen verfügbar, auf denen unterschiedliche Betriebssysteme ausgeführt werden. Insbesondere begann sich C auf der sich schnell entwickelnden IBM PC-Plattform zu verbreiten.

K&R führte die folgenden Sprachfunktionen ein:

Strukturen (Datentyp struct);
lange Ganzzahl (Long-Int-Datentyp);
vorzeichenlose Ganzzahl (Datentyp unsigned int);
Operator += und ähnliche (alte Operatoren =+ verwirrten den lexikalischen Analysator des C-Compilers, zum Beispiel beim Vergleich der Ausdrücke i =+ 10 und i = +10).

K&R C wird oft als der wichtigste Teil der Sprache angesehen, den ein C-Compiler unterstützen muss. Viele Jahre lang, auch nach der Veröffentlichung von ANSI C, galt es als das Mindestniveau, das Programmierer einhalten sollten, die maximale Portabilität ihrer Programme wollten, da damals nicht alle Compiler ANSI C unterstützten und guter K&R-C-Code für ANSI C geeignet war .

Mit der zunehmenden Popularität gingen Probleme einher. Programmierer, die neue Compiler schrieben, nutzten die in K&R beschriebene Sprache als Grundlage. Leider wurden in K&R einige Funktionen der Sprache vage beschrieben, sodass Compiler sie oft nach eigenem Ermessen interpretierten. Darüber hinaus wurde in dem Buch nicht klar unterschieden, was ein Merkmal der Sprache und was ein Merkmal des UNIX-Betriebssystems ist.

Seit der Veröffentlichung von K&R C wurden der Sprache mehrere Funktionen hinzugefügt, die von Compilern von AT&T und einigen anderen Herstellern unterstützt werden:

Funktionen, die keinen Wert zurückgeben (Typ void) und Zeiger, die keinen Typ haben (Typ void *);
Funktionen, die Gewerkschaften und Strukturen zurückgeben;
Namen von Feldern dieser Strukturen in unterschiedlichen Namensräumen für jede Struktur;
Strukturzuweisungen;
Konstantenspezifizierer (const);
eine Standardbibliothek, die die meisten von verschiedenen Herstellern eingeführten Funktionen implementiert;
Aufzählungstyp (Aufzählung);
Bruchzahl mit einfacher Genauigkeit (Float).

Was die Situation noch verschlimmerte, war, dass sich C nach der Veröffentlichung von K&R weiterentwickelte: Neue Funktionen wurden hinzugefügt und alte herausgeschnitten. Schon bald bestand ein offensichtlicher Bedarf an einer umfassenden, genauen und modernen Beschreibung der Sprache. Ohne einen solchen Standard tauchten Dialekte der Sprache auf, die die Portabilität – die größte Stärke der Sprache – beeinträchtigten.

Standards

In den späten 1970er Jahren begann die C-Sprache, BASIC zu ersetzen, das damals führend in der Mikrocomputerprogrammierung war. In den 1980er Jahren wurde es an die IBM-PC-Architektur angepasst, was zu einem deutlichen Anstieg seiner Popularität führte.

Das American National Standards Institute (ANSI) begann mit der Entwicklung des C-Sprachstandards. Unter ihm wurde 1983 das X3J11-Komitee gegründet, das mit der Entwicklung des Standards begann. Die erste Version des Standards wurde 1989 veröffentlicht und hieß C89. Nach geringfügigen Änderungen an der Norm wurde sie 1990 von der Internationalen Organisation für Normung ISO übernommen. Dann wurde es unter dem Code ISO/IEC 9899:1990 bekannt, aber unter Programmierern blieb der Name hängen, der mit dem Jahr der Verabschiedung des Standards verbunden war: C90. Die neueste Version des Standards ist ISO/IEC 9899:1999, auch bekannt als C99, die im Jahr 2000 verabschiedet wurde.

Unter den Neuerungen des C99-Standards ist die Änderung der Regel bezüglich des Ortes der Variablendeklaration hervorzuheben. Jetzt können neue Variablen mitten im Code deklariert werden und nicht nur am Anfang eines zusammengesetzten Blocks oder im globalen Bereich.

Einige Funktionen von C99:

Inline-Funktionen (Inline);
Deklaration lokaler Variablen in einer beliebigen Programmtextanweisung (wie in C++);
neue Datentypen wie long long int (um den Übergang von 32- zu 64-Bit-Zahlen zu erleichtern), der explizite boolesche Datentyp _Bool und der komplexe Typ zur Darstellung komplexer Zahlen;
Arrays variabler Länge;
Unterstützung für eingeschränkte Zeiger (restrict);
benannte Initialisierung von Strukturen: struct ( int x, y, z; ) point = ( .y=10, .z=20, .x=30 );
Unterstützung für einzeilige Kommentare, die mit // beginnen, entlehnt von C++ (viele C-Compiler unterstützten sie zuvor als Zusatz);
mehrere neue Bibliotheksfunktionen wie snprintf;
mehrere neue Header-Dateien, wie zum Beispiel stdint.h.

Der C99-Standard wird mittlerweile mehr oder weniger von allen modernen C-Compilern unterstützt. Im Idealfall wird Code, der in C unter Einhaltung von Standards und ohne den Einsatz von Hardware und systemabhängigen Aufrufen geschrieben wurde, sowohl zu Hardware- als auch zu Plattform-unabhängigem Code.

Im Jahr 2007 begann die Arbeit am nächsten C-Sprachstandard. Am 8. Dezember 2011 wurde ein neuer Standard für die Sprache C veröffentlicht (ISO/IEC 9899:2011). Einige Funktionen des neuen Standards werden bereits von den GCC- und Clang-Compilern unterstützt.

Hauptmerkmale von C11:

Multithreading-Unterstützung;
verbesserte Unicode-Unterstützung;
verallgemeinerte Makros (typgenerische Ausdrücke, ermöglichen statisches Überladen);
anonyme Strukturen und Unions (vereinfachen den Zugriff auf verschachtelte Strukturen);
Steuerung der Objektausrichtung;
statische Behauptungen;
Entfernung der gefährlichen gets-Funktion (zugunsten der sicheren gets_s);
Funktion quick_exit;
Funktionsspezifizierer _Noreturn;
Neuer exklusiver Dateiöffnungsmodus.

Trotz der Existenz des '11-Standards unterstützen viele Compiler noch nicht einmal die C99-Versionen vollständig.

Warum Xi kritisiert wird

Die Eintrittsbarriere ist relativ hoch, was den Einsatz im Unterricht als erste Programmiersprache erschwert. Bei der Programmierung in C sind viele Details zu beachten. „Entstanden aus einem Hacker-Hintergrund, fördert es einen Programmierstil, der oft unsicher ist und das Schreiben von kompliziertem Code fördert“, schreibt Wikipedia.

Peter Moylan äußerte tiefere und begründetere Kritik. Er widmete zwölf Seiten der Kritik an Xi. Hier ein paar Ausschnitte:

Probleme mit der Modularität
Modulares Programmieren in C ist möglich, aber nur, wenn der Programmierer eine Reihe ziemlich strenger Regeln einhält:

Pro Modul muss genau eine Header-Datei vorhanden sein. Es sollte nur exportierbare Funktionsprototypen, Beschreibungen und nichts anderes (außer Kommentare) enthalten.

Die externe aufrufende Prozedur sollte zu diesem Modul nur die Kommentare in der Header-Datei kennen.

Um die Integrität zu überprüfen, muss jedes Modul seine eigene Header-Datei importieren.

Um Informationen aus einem anderen Modul zu importieren, muss jedes Modul #include-Zeilen sowie Kommentare enthalten, die angeben, was importiert wird.

Funktionsprototypen können nur in Header-Dateien verwendet werden. (Diese Regel ist notwendig, da die C-Sprache über keinen Mechanismus verfügt, mit dem überprüft werden kann, ob eine Funktion im selben Modul wie ihr Prototyp implementiert ist. Daher kann die Verwendung eines Prototyps einen Fehler „fehlende Funktion“ verschleiern.)

Jede globale Variable in einem Modul und jede andere Funktion als die über die Header-Datei importierte muss als statisch deklariert werden.

Die Compilerwarnung „Funktionsaufruf ohne Prototyp“ sollte bereitgestellt werden; Eine solche Warnung sollte immer als Fehler betrachtet werden.

Der Programmierer muss sicherstellen, dass jeder in der Header-Datei angegebene Prototyp einer nicht privaten (d. h. in der üblichen C-Terminologie nicht statischen) Funktion entspricht, die unter demselben Namen im selben Modul implementiert ist. Leider ist es aufgrund der Natur der C-Sprache unmöglich, dies automatisch zu überprüfen.

Sie sollten jeder Verwendung von grep gegenüber misstrauisch sein. Wenn der Prototyp nicht an der richtigen Stelle ist, liegt höchstwahrscheinlich ein Fehler vor.

Im Idealfall sollten Programmierer, die im selben Team arbeiten, keinen Zugriff auf die Quelldateien des anderen haben. Sie sollten nur Objektmodule und Header-Dateien gemeinsam nutzen.

Die offensichtliche Schwierigkeit besteht darin, dass nur wenige Leute diese Regeln befolgen, da der Compiler nicht verlangt, dass sie strikt befolgt werden. Eine modulare Programmiersprache schützt gute Programmierer zumindest teilweise vor dem Chaos, das schlechte Programmierer anrichten. Aber die C-Sprache kann dies nicht.



Bild von smartagilee.com
Probleme mit Zeigern
Trotz aller Fortschritte in Theorie und Praxis von Datenstrukturen bleiben Zeiger für Programmierer ein echter Stolperstein. Die Arbeit mit Zeigern macht einen erheblichen Teil der Zeit aus, die für das Debuggen eines Programms aufgewendet wird, und sie verursachen die meisten Probleme, die seine Entwicklung erschweren.

Sie können zwischen wichtigen und unwichtigen Hinweisen unterscheiden. Wichtig für unser Verständnis ist der Zeiger, der zum Erstellen und Verwalten der Datenstruktur erforderlich ist.

Ein Zeiger gilt als unwichtig, wenn er zur Implementierung der Datenstruktur nicht erforderlich ist. In einem typischen C-Programm gibt es viel mehr unwichtige als wichtige Hinweise. Dafür gibt es zwei Gründe.

Erstens ist es bei Programmierern, die die Sprache C verwenden, zur Tradition geworden, Zeiger auch dann zu erstellen, wenn bereits andere Zugriffsmethoden vorhanden sind, die ihnen in nichts nachstehen, beispielsweise beim Anzeigen von Array-Elementen.

Der zweite Grund ist die C-Sprachregel, nach der alle Funktionsparameter als Wert übergeben werden müssen. Wenn Sie das Äquivalent eines Pascal VAR oder eines Ada-Inouts benötigen, besteht die einzige Lösung darin, einen Zeiger zu übergeben. Dies erklärt größtenteils die schlechte Lesbarkeit von C-Programmen.

Die Situation wird noch schlimmer, wenn es notwendig ist, einen wichtigen Zeiger als Eingabe-/Ausgabeparameter zu übergeben. In diesem Fall muss der Funktion ein Zeiger auf einen Zeiger übergeben werden, was selbst den erfahrensten Programmierern Schwierigkeiten bereitet.

Si - lebendig

Laut Daten vom Juni 2016 belegt der TIOBE-Index, der die wachsende Beliebtheit von Programmiersprachen misst, C den zweiten Platz:

Lassen Sie jemanden sagen, dass C veraltet ist und dass seine weit verbreitete Verwendung eine Folge von Glück und aktiver PR ist. Lassen Sie jemanden sagen, dass die C-Sprache ohne UNIX nie entstanden wäre. Tags hinzufügen

LYRISCHE EINFÜHRUNG.
An der Fakultät für Informatik gibt es ein solches Fach: YaSiTP (C-Sprach- und Programmiertheorie). ISIT-Studenten studieren es im dritten Jahr und haben in der Regel keine besonderen Probleme damit. und unglückliche Studierende mit IC sind gezwungen, ab den ersten Wochen ihres Aufenthalts an der Universität damit zu beginnen, Programmieren zu studieren. Alles wäre in Ordnung – wenn ein Schüler in der Schule zumindest ein wenig Informatik studiert und Pascal gut kennt, wird er die Syntax lernen und sich weiterhin von Sprache und diskreter Sprache leiten lassen. Was ist, wenn Sie nicht unterrichtet haben und es nicht wissen? also sogar ganz?
dann ist Ihr Geschäft Müll\schlecht.
Erstens: Schlafen Sie nicht während Khlebostroevs Vorträgen. Es gibt keine schwierigere Aufgabe, als beim vierten Paar mit seiner gemessenen Stimme nicht einzuschlafen, aber... es hängt alles von Ihnen ab.
Zweitens: Beginnen Sie mit der Lektüre eines Buches, zum Beispiel http://www.ph4s.ru/bookprogramir_1.html. Dort finden Sie Bogatyrevs Buch „A Complete Idiot’s Guide to Programming“ oder etwas anderes nach Ihrem Geschmack.
Drittens und vielleicht am wichtigsten: PRAXIS. worüber ich sprechen werde.
Bevor Sie versuchen, zu Hause etwas zu schreiben, müssen Sie das richtige Studio einrichten. Basierend auf den Erfahrungen fast des gesamten MKN 2012-Sets funktioniert Vidul Studio 2010 C++ Express nicht. Was an der Universität PERFEKT auf Computern geschrieben ist, liest sie mit einem Fehler ohne Korrekturmöglichkeit. Warum geht uns nichts an, wir suchen Visual Studio 2010 (2012) Ultimate (Visual Studio Ultimate 2012). zum Beispiel hier: http://www.microsoft.com/visualstudio/ru... . Wir installieren die Testversion, danach können Sie mit dem Üben beginnen.

(Anmerkung 1:
Datei – zusätzliche Speicherparameter – kyrillisches Dokument. dann liest die Konsole normal russische Buchstaben.

HINWEIS2: Um aus dem präsentierten Code ein vollwertiges Programm zu erhalten, müssen Sie ein neues Projekt in Visual Studio erstellen, das Element „Leeres Projekt“ auswählen, den Projektnamen im Ordner „Quellcodedateien“ rechts angeben -Klicken Sie, um ein neues Element „C++-Datei“ hinzuzufügen, kopieren Sie meinen Code in das resultierende Fenster und kompilieren Sie ihn (Steuerungstasten + F5) und versuchen Sie dann, selbst etwas Ähnliches zu schreiben.)

ÜBEN.
Klassischerweise beginnt das Programmieren mit dem Schreiben eines einfachen „Hallo Welt!“-Programms.
Es gibt im Forum mehrere Threads zu diesem Programm in anderen Sprachen als C++, daher hier der Code:

#include "stdio.h" #include "conio.h" int main(int argc, char* argv) ( printf("Hello, World!\n"); )

Es ist auch nützlich, ein paar einfache Programme dieser Art zu schreiben (dieses zeigt beispielsweise das Ergebnis einer Gleichung mit im Voraus bekannten Daten an):

// tytytyty.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) ( int x , y , z; x = 9; y = 4; z = x*y; printf("%d", z) ; )

dann komplizierter (dieses Programm liest zwei Eingabewerte und gibt das Ergebnis einer Gleichung mit den eingegebenen Werten aus):

#include "stdio.h" void main() ( int x , y , z; scanf("%d, %d", &x, &y); z = x*y; printf("%d", z); )

Das nächste Programm, das der Lehrer nach „Hallo Welt!“ gab, sah für mich so aus:
Bedingung: Gegeben sei ein Quadrat und ein darin eingeschriebener Kreis. Finden Sie die Hälfte der Fläche des Quadrats, die außerhalb des Kreises verbleibt, wenn die Seite des Quadrats bekannt ist.
Lösung:

#include "stdio.h" #include "math.h" #define PI 3.1415926535897932384626433832795 void main() ( double x; printf("enter the value of the side of the quadrat x = "); scanf("%lf", &x); double y = x / 2; double f = x * x; double z = PI * y * y;

als Option mit der Konstantenbibliothek:

#define _USE_MATH_DEFINES #include "stdio.h" #include "math.h" void main() ( double x; printf("x = "); scanf("%lf", &x); double y = x / 2; double f = x * x; double z = M_PI * y * y; double s = (f - z) / 2;

Programm Nummer fünf aus Aufgabe zwei. Bedingung: Lösen Sie eine quadratische Gleichung mit angegebenen Koeffizienten.
Implementierung:

#include "stdio.h" #include "math.h" #include "conio.h" int main() ( float x , x1, sq, a, b, c; printf("Vvedite znachenija a, b, c: "); scanf("%f, %f, %f", &a, &b, &c); if (a == 0) ( x = - c / b; printf("%f", x); ) else ( float k; k = b * b - 4 * a * c; if (k< 0) { printf("Kornei net!"); } else if (k == 0) { x = - b / (2 * a); printf("%f", x); } else { sq = sqrt(k); x = (-b + sq) / (2 * a); x1 = (-b - sq) / (2 * a); printf("%f, %f", x, x1); } } getch(); return 0; }

(ACHTUNG!! bei der Angabe von Bibliotheken werden anstelle von Größer-/Kleiner-Zeichen überall Anführungszeichen angegeben)

NACHWORT: Weitere Aufgaben werden später hinzugefügt.

Programmiersprache C++(ausgesprochen „si plus plus“) ist eine Multiparadigmen-Programmiersprache, die objektorientierte Programmierung unterstützt. Bjarne Stroustrup von Bell Labs entwickelte in den 1980er Jahren die Programmiersprache C++ auf der Grundlage der Programmiersprache C. Vor allem dank der enormen Beliebtheit von C entwickelte sich die Programmiersprache C++ in den 1990er Jahren zur beliebtesten Sprache. Programmieren für Einsteiger. Und es wird auch heute noch sehr häufig in kommerziellen Anwendungen eingesetzt. Die Programmiersprache C++ hat C in kommerziellen Anwendungen ersetzt, weil sie es Programmierern ermöglicht, immer komplexere Systeme zu entwickeln, ohne ihre C-Wurzeln aufzugeben (z. B. in einfachem C geschriebene Bibliotheken). Neben dem objektorientierten Design unterscheidet sich das heutige C++ von C durch die Unterstützung der generischen Programmierung und der Template-Metaprogrammierung. Dies wird durch Typaliase, Inline-Erweiterungen, Vorlagen und Kommentare im //-Kommentarstil implementiert (beachten Sie jedoch, dass C später den //-Kommentar übernommen hat). Programmieren für Dummies.

Geschichte von C++
Stroustrup begann 1979 mit der Arbeit an der Sprache, inspiriert von Simula67 als Programmierrahmen. AT&T verwendete die Sprache erstmals im August 1983. Der ursprüngliche Compiler hieß Cfront. Die erste kommerzielle Veröffentlichung erfolgte im Oktober 1985. C++ wurde 1998 durch ISO/IEC 14882-1998 standardisiert.

Geschichte des Namens „C++“
Dieser Titel gehört Rick Mascitti (Mitte 1983) und wurde erstmals im Dezember 1983 verwendet. Früher, während der Forschungs- und Entwicklungsphase der Sprache, war es üblich, sie „C mit Klassen“ zu nennen. Der endgültige Name kommt von C und dem „++“-Operator (der den Wert einer Variablen um eins erhöht) und der üblichen Benennung mit „+“, um erweiterte Fähigkeiten eines Computerprogramms anzuzeigen, zum Beispiel: „Wikipedia +“. (Einfach ausgedrückt bedeutet das Pluszeichen, das Programm zu verbessern und ihm neue Funktionalität zu verleihen.) Laut Stroustrup: „Dieser Name bedeutet die evolutionäre Natur der Änderung von C.“ Obwohl der meiste C-Code für C++ gültig ist, ist C keine Teilmenge von C++.
Einige C-Programmierer haben festgestellt, dass, wenn Sie x=3 deklarieren; und y=x++; dann bei Ausführung x= 4 und y = 3; da x inkrementiert wird, nachdem sein Wert y zugewiesen wurde. Wenn Sie jedoch y=++x; , dann y=4 und x=4 .
Nach dieser Überlegung könnte ein passenderer Name für C++ tatsächlich ++C sein. Allerdings sind C++ und ++C Erweiterungen von C, sodass die C++-Form häufiger vorkommt als ++C.
Pedanten mögen anmerken, dass sich die C-Sprache nach der Einführung von C++ nicht verändert hat und der zutreffendste Name möglicherweise „C +1“ ist.

C++-Besitz
Niemand spricht C++. Stroustrup und AT&T erhalten keine Lizenzgebühren für die Nutzung von C++.

Programm „Hallo Wikipedia!“
Der folgende Code kann in ein Programm kompiliert werden, das den Text der Nachricht druckt.

Include // Der Header wird für std::cout benötigt // Beginn der Funktion main() int main(int argc, const char**argv) ( // ( ... ) wird verwendet, um Codeblöcke einzuschließen std:: cout<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

Klassendefinition

Einbinden mit std::string; class InetMessage ( string m_subject, m_to, m_from; public: InetMessage (const string& subject, const string& to, const string& from); string subject () const; string to () const; string from () const; );

C++-Bibliotheken
Die C++-Standardbibliotheken sind meist eine Obermenge der C-Standardbibliotheken. Die meisten C++-Bibliotheken umfassen die Standard Template Library (STL). Die STL bietet nützliche Tools wie Iteratoren (die wie Zeiger auf hoher Ebene sind) und Container (die wie Arrays sind, die automatisch um neue Elemente erweitert werden können). Wie in C erfolgt der Bibliothekszugriff mithilfe der #include-Direktive, um Standard-Header-Dateien einzubinden. C++ bietet fünfzig nicht veraltete Standardheader.

Die Zukunft der Sprache
Die Programmiersprache C++ entwickelt sich ständig weiter, um den wachsenden Anforderungen gerecht zu werden. Bis heute (ca. 2004) kämpfen Compiler- und Entwicklungsumgebungsentwickler damit, alle C++-Funktionen zu unterstützen, eine Situation, die sich zwischen 1998 und 2003 deutlich verbessert hat. Insbesondere eine Gruppe, Boost.org, hat große Anstrengungen unternommen, um die Programmiersprache C++ zu dem zu machen, was wir heute kennen, und das Standardkomitee zu Funktionen zu beraten, die funktionieren und verbessert werden müssen. Aktuelle Arbeiten deuten darauf hin, dass C++ immer mehr auf seiner Multiparadigmennatur aufbauen wird. Auf Boost.org gehostete Werke erweitern beispielsweise die Funktions- und Metafähigkeiten der C++-Programmierung erheblich. C++ verfügt immer noch über keinen Standard für die Benennung von Variablen und Funktionen, wodurch von verschiedenen Compilern erstellter Code inkompatibel ist.



Aktie