Inhalt
- Fortgeschrittene C.
- Varianten eines Themas
- Taubengerät
- Union
- Gehe zu
- Flüchtig
- Standardbibliotheken
- Funktionen mit variabler Argumentanzahl
- Fazit
Charles ist ein Software-Ingenieur und College-Professor, der sich für Technologie, Medizin, Wirtschaft und Ernährung interessiert.
Fortgeschrittene C.
Aus irgendeinem Grund ist C die Sprache Ihrer Wahl. Was sind gute Gründe, sich für C zu entscheiden?
Ein Laie wird Ihnen sagen, dass C schnell ist. Zumindest in einigen Fällen ist das ein unverdientes Stereotyp. Sind alle anderen Sprachen im Vergleich langsam? Kein fortgeschrittener Programmierer glaubt das und Sie sollten es auch nicht.
C hat drei Vorteile gegenüber anderen C-ähnlichen Sprachen. Hier sind sie.
- Geringer Overhead. C verdient seinen Ruf für die Fähigkeit, ausführbare Programme zu erstellen, die nicht viel größer sind, als sie unbedingt sein müssen. Dies ist für Geräte mit wenig Speicher von entscheidender Bedeutung. Auf einem modernen PC ist dies überhaupt nicht wichtig.
- Portabilität. Wenn Sie auf neue oder ungewöhnliche Hardware mit einem benutzerdefinierten Befehlssatz oder nicht flachem Speicherplatz abzielen müssen, sind C und ASM wahrscheinlich die einzigen verfügbaren Optionen, obwohl es Ausnahmen gibt. C ist nicht besonders gut in der Portabilität zwischen Linux / Mac / Windows-Versionen.
- Die Fähigkeit, gefährliche und bizarre Dinge mit Gedächtnis- und Flusskontrolle zu tun. Hier leuchten C und C ++ wirklich.
Betrachten Sie die oben abgebildete Funktion. Es ist eine modernisierte Version des ursprünglichen Duff's Device. Schauen Sie es sich genau an, wenn Sie es noch nicht gesehen haben. Bei der ersten Lesung werden die meisten C-Programmierer das denken do-while vermischt mit Fall Aussagen müssen ein Fehler sein. Sobald dies nachlässt, schlagen einige memcpy () als Ersatz vor (dies ist jedoch nicht möglich).
Einen ausführlicheren Kommentar finden Sie in diesem Artikel.
Varianten eines Themas
Betrachten Sie die unten abgebildete Funktion. Es ist eine modifizierte Version des Original-Taubengeräts. Die entsprechenden if-Anweisungen folgen unmittelbar danach.
Für einen ausführlicheren Kommentar lesen Sie hier mehr über Pigeons Gerät.
Taubengerät
if (1 == mode || (0 == mode && test (a, b))) return fun1 (a, b); if (2 == mode || (0 == mode &&! test (a, b))) return fun2 (a, b); return 0;
Beide Techniken sollten für jedes Programm, das jemals von Menschen gelesen wird, sehr sparsam eingesetzt werden. Diese Anleitung gilt für fast alle Techniken auf Expertenebene. Verwenden Sie sie nur selten. Das liegt nicht daran, dass sie nicht funktionieren, sondern daran, dass sie oft schwer zu lesen und zu modifizieren sind.
C ist schrullig, fehlerhaft und ein enormer Erfolg.
- Dennis Ritchie, 1993
union IntFloat {int ix; float fx; }}
Union
Union bedeutet, dass zwei Variablen an derselben Stelle im Speicher gespeichert sind. Es sieht genauso aus wie ein struct und in dem angegebenen Beispiel beziehen sich ix und fx auf dieselben Daten, haben jedoch sehr unterschiedliche Bedeutungen. Inzwischen müssen Sie sich bewusst sein, dass a schweben besteht aus der gleichen Art von Bits wie ein int, aber in einem schweben Einige dieser Bits sind Vorzeichen und signifikanten Ziffern des gespeicherten Werts gewidmet, andere einem vorzeichenbehafteten Exponenten. Wenn Sie schon immer einen Blick auf diese Werte als Rohbit-Array werfen wollten, Unions sind ein Weg, um es zu tun. Schreiben Sie einfach eine schweben Wert auf fx und drucke ix mit der% x-Formatzeichenfolge.
Mitglieder eines Union kann ein beliebiger Typ sein, einschließlich Zeiger, Ganzzahlen, Gleitkomma, structs oder andere Unions. Unions kann mit verwendet werden typedef auf die gleiche Weise wie ein typedef struct, oder der Union Name kann ganz weggelassen werden.
Gehe zu
Für soziale Zwecke sollten Sie sich dessen bewusst sein GEHE ZU kann als schädlich angesehen werden. C und C ++ enthalten beide gehe zu als Schlüsselwort, und ich habe es vermieden, es in den vorherigen drei Artikeln zu diskutieren, weil niemand jemals verwenden sollte gehe zu aus irgendeinem Grund. Ende der Diskussion, und bitte lesen Sie nicht den nächsten Absatz.
Gehe zu ist eine Technik auf Expertenebene. Ich kann mir eine legitime Verwendung dafür vorstellen, aber es gibt wahrscheinlich andere. Angenommen, Sie müssen in der Mitte einer verschachtelten Schleife fertig sein, und aus irgendeinem Grund können Sie die Schleife nicht in ihre eigene Funktion einfügen und return verwenden. Da ist dein gehe zu.
Flüchtig
Das flüchtig Das Schlüsselwort teilt C mit, dass sich eine Variable von einem Moment zum nächsten unabhängig ändern kann. Es kann sich ändern, weil es in einem anderen Thread geändert wurde, oder es kann das Ergebnis des Lesens einer Geräteadresse sein. Was auch immer der Grund sein mag, C wird a sorgfältig lesen und schreiben flüchtig Variable aus dem Speicher genau wie Sie sagen, ohne ausgefallenes Caching oder logische Optimierungen. Wenn Sie mit der Flusskontrolle etwas Gefährliches oder Bizarres tun, flüchtig wird sicherstellen, dass Ihre Schreibvorgänge geschrieben werden.
Ein Zeiger auf a volatile int wird so deklariert.
- volatile int * p;
Liest und schreibt an flüchtig Variablen können immer noch nicht in der richtigen Reihenfolge ausgeführt werden flüchtig darf nicht zum Implementieren von Sperren verwendet werden, kann jedoch für eine eingeschränkte Kommunikation zwischen Threads verwendet werden.
Standardbibliotheken
C wurde nicht erfunden, um große Programme zu schreiben. C war nie dazu gedacht, Datenstrukturen mit Millionen von Elementen zu verarbeiten. C wurde in den frühen 1970er Jahren auf Hardware erfunden, die bereits veraltet war, und Ritchie stellte zu Recht fest, dass Programmierer, die etwas Anspruchsvolleres als eine Sortierung und eine binäre Suche benötigten, es am besten selbst schreiben sollten.
Dies macht C leicht zu erlernen und Cross-Compiler leicht zu schreiben, aber jetzt haben wir Gigabyte RAM. Um große Programme zu schreiben, sie später zu lesen und problemlos zwischen C-Projekten zu wechseln, benötigen wir standardisierte Versionen von Datenstrukturen und Algorithmen, die immer außerhalb des C-Standards liegen.
Wenn C Ihre bevorzugte Sprache ist, dann nehmen Sie auf jeden Fall die Einfachheit an. Wenn Ihr C-Projekt groß und kompliziert wird, wählen oder schreiben Sie Projektstandardversionen von Warteschlangen, Bäumen, Hash-Tabellen und allem anderen. Erwarten Sie nur nicht, dass C es Ihnen leicht macht, denn es wird ein Albtraum.
Funktionen mit variabler Argumentanzahl
Es wundert mich, dass es nach 10 Jahren des Schreibens von C immer noch kleine Ecken gibt, die ich nicht vollständig erforscht habe.
- Tom Duff, 1983
Fazit
Das ist alles, was ich über C-Programmierung zu sagen habe. Für Sie ist es nicht das Ende.
Wenn Sie so weit gekommen sind, ist das Programmieren ein wichtiger Teil Ihres Lebens und Sie sind entweder auf dem besten Weg zu einem Weltklasse-Experten oder weit darüber hinaus. Als Experte müssen Sie selbst entscheiden, wann Sie sich von anderen beraten lassen möchten. Ich habe meine auf ein Minimum beschränkt, mein Bestes getan, um C so zu präsentieren, wie es ist, und hoffentlich können Sie damit C verwenden, um Ihre Ziele auf die bestmögliche Weise zu erreichen.
Meinem Fachpublikum: Habe ich etwas ausgelassen oder etwas schlecht erklärt? Lass es mich in den Kommentaren wissen. An die anderen: Ich weiß, dass einige von Ihnen ohne die richtige Übung und das richtige Verständnis mitlesen, und ich hoffe, diese Serie hat Ihnen einen Einblick in die Welt des Lösens von Rätseln mit Computern gegeben. Vielleicht kommst du eines Tages zurück und gehst den Weg des Experten wirklich.
Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.