C is een algemene, procedurele, overdraagbare programmeertaal op hoog niveau en is een van de populairste en invloedrijkste talen. De taal is ontworpen om te worden gecompileerd met behulp van een eenvoudige compiler, om op laag niveau toegang tot het geheugen te bieden, om taalconstructies te bieden die efficiënt kunnen worden omgezet naar machine-instructies en om minimale runtime-ondersteuning te vereisen. Veel programmeertalen zijn schatplichtig aan C. Het is zo’n beetje de lingua franca in de programmeerwereld geworden.
C is vrij eenvoudig te begrijpen. Het stelt de programmeur in staat programma’s op een duidelijke, gemakkelijke, logische manier te organiseren. Het is een zeer flexibele, praktische en compacte taal, gecombineerd met een gemakkelijk te lezen syntaxis. In C geschreven code loopt snel, met gemakkelijke toegang tot de low-level faciliteiten in de computer. Compiler directives maken het mogelijk om een enkele versie van een programma te produceren, gecompileerd voor verschillende architecturen.
C gaat over vrijheid. Daarom is het zinvol om C te leren met boeken die ook vrijheid belichamen. Kijk maar eens of een van mijn boeken je aanspreekt.
1. The C Book van Mike Banahan, Declan Brady en Mark Doran
The C Book is ontworpen voor programmeurs die al enige ervaring hebben met het gebruik van een moderne procedurele programmeertaal op hoog niveau.
U zou al iets moeten begrijpen van statements, variabelen, voorwaardelijke uitvoering, arrays, procedures (of subroutines) enzovoort.
Het boek concentreert zich op de dingen die speciaal zijn aan C. In het bijzonder is het de manier waarop C wordt gebruikt die wordt gefocust. Het boek is zowel informatief als prettig leesbaar.
De hoofdstukken omvatten:
- Een inleiding tot C
- Variabelen en rekenkunde – introduceert enkele van de grondbeginselen van C, waaronder trefwoorden en identificatoren, declaratie van variabelen, reële typen, integrale typen, uitdrukkingen en rekenkunde, en constanten
- Control of Flow and Logical Expressions – gaat in op de verschillende manieren waarop de control of flow statements in een C-programma kunnen worden gebruikt, waaronder enkele statements die tot nu toe nog niet zijn geïntroduceerd. Flow control, meer logische expressies, en vreemde operatoren
- Functies – het type functies, recursie en argument passing, en linkage
- Arrays en pointers – arrays, pointers, character handling, sizeof en storage allocation, pointers naar functies, expressies met pointers, arrays, de & operator en functieverklaringen
- Gestructureerde gegevenstypen – structuren, unions, bitfields, enums, qualifiers en afgeleide typen, en initialisatie
- De preprocessor – hoe de preprocessor werkt, en directives
- Gespecialiseerde gebieden van C – declaraties, definities en toegankelijkheid, typedef, const en volatile, en sequentiepunten
- Bibliotheken – diagnostiek, tekenbehandeling, lokalisatie, limieten, wiskundige functies, niet-lokale sprongen, signaalbehandeling, variabel aantal argumenten, invoer en uitvoer, geformatteerde I/O, teken-I/O, niet-geformatteerde I/O, functies voor willekeurige toegang, algemene hulpprogramma’s, tekenreeksbehandeling, en datum en tijd
- Volledige programma’s in C – alles samenvoegen, argumenten voor main, programma argumenten interpreteren, een patroon overeenstemmend programma, en een meer ambitieus voorbeeld
De auteurs geven de lezer toestemming om met het boek te doen wat hij wil, mits er een erkenning van de auteurs en hun copyright bij zit. Van wat Mike Banahan heeft bevestigd, valt het boek effectief onder de Creative Commons Licentie.
Lees het boek
2. C Elements of Style door Steve Oualline
C Elements of Style is een handige gids die de beginselen van een goede programmeerstijl behandelt, en C- en C++-programmeurs leert hoe ze code moeten schrijven die door anderen gemakkelijk kan worden gelezen, begrepen en onderhouden. Of u nu een student of een professionele programmeur bent, u zult profiteren van de vele tips en technieken voor het bouwen van elegante, betrouwbare code.
Het boek probeert lezers te laten zien hoe u een goede programmeerstijl in uw code kunt bouwen. Aangezien de computer alleen de code leest en de mens zich concentreert op het commentaar, heeft een goede programmeerstijl betrekking op beide delen van een programma.
Het uiteindelijke doel is het bouwen van een goed ontworpen, goed geschreven code die niet alleen effectief gebruik maakt van de computer en maar ook zorgvuldig geconstrueerd commentaar bevat om de mens te helpen het te begrijpen. Deze voorwaarde zal het debuggen, onderhoud en verbeteringsproces vergemakkelijken, wat uiteindelijk de leesbaarheid, portabiliteit, betrouwbaarheid en onderhoudbaarheid van uw code zal verbeteren.
Binnenin vindt u richtlijnen over het schrijven van commentaar, programmakoppen, het bepalen van variabelennamen, statement formattering, statement details, het schrijven van een preprocessor, het organiseren van directories en het maken van makefile.
Dit boek is gepubliceerd onder de Creative Commons Licentie.
Lees het boek
3. An Introduction to GCC door Brian Gough
An Introduction to GCC geeft een introductie tot de GNU C en C++ Compilers, gcc en g++, die deel uitmaken van de GNU Compiler Collection (GCC).
Na het lezen van dit boek weet u hoe u een programma moet compileren en hoe u de basisopties van de compiler voor optimalisatie en debugging moet gebruiken.
Dit boek legt uit hoe u de compiler zelf moet gebruiken. Gebaseerd op jaren van observatie van vragen gepost op mailinglijsten, leidt het de lezer rechtstreeks naar de belangrijke opties van GCC. Het boek leert de lezer geen C.
Hoofdstukken:
- Inleiding
- Compileren van een C-programma – beschrijft hoe je C-programma’s compileert met gcc. Programma’s kunnen worden gecompileerd vanuit een enkel bronbestand of vanuit meerdere bronbestanden, en kunnen systeembibliotheken en header-bestanden gebruiken
- Compilatie-opties – beschrijft andere veelgebruikte compileropties die beschikbaar zijn in GCC. Deze opties regelen functies zoals de zoekpaden die worden gebruikt voor het lokaliseren van bibliotheken en include bestanden, het gebruik van extra waarschuwingen en diagnostieken, preprocessor macro’s en C taal dialecten
- De preprocessor gebruiken – beschrijft het gebruik van de GNU C preprocessor cpp, die deel uitmaakt van het GCC pakket. De preprocessor breidt macro’s in bronbestanden uit voordat ze worden gecompileerd. Hij wordt automatisch aangeroepen wanneer GCC een C of C++ programma verwerkt
- Compileren voor debugging – biedt de -g debug optie om extra debug informatie op te slaan in object bestanden en executables. Met deze debug-informatie kunnen fouten worden getraceerd van een specifieke machine-instructie naar de corresponderende regel in het originele bron-bestand
- Compileren met optimalisatie – GCC is een optimaliserende compiler. Het biedt een breed scala aan opties die tot doel hebben de snelheid te verhogen, of de grootte te verminderen, van de uitvoerbare bestanden die het genereert
- Compileren van een C++ programma – beschrijft hoe GCC gebruikt kan worden om programma’s geschreven in C++ te compileren, en de opdrachtregel opties die specifiek zijn voor die taal
- Platform-specifieke opties – beschrijft enkele van de opties die beschikbaar zijn voor gangbare platforms: Intel en AMD x86 opties, x86 uitbreidingen, x86 64-bit processoren, DEC Alpha opties, SPARC opties, POWER/PowerPC opties, Multi-architecture ondersteuning, en floating-point problemen
- Troubleshooting – GCC biedt verschillende hulp en diagnostische opties om problemen met het compilatieproces op te lossen
- Compiler-gerelateerde tools – beschrijft een aantal tools die nuttig zijn in combinatie met GCC. Deze omvatten de GNU archiver ar, voor het maken van bibliotheken, en de GNU profiling en coverage test programma’s, gprof en gcov
- Hoe de compiler werkt – beschrijft in meer detail hoe GCC bronbestanden omzet in een uitvoerbaar bestand. Compilatie is een meerfasig proces waarbij verschillende gereedschappen betrokken zijn, waaronder de GNU Compiler zelf (via de gcc of g++ frontends), de GNU Assembler as, en de GNU Linker ld. De complete set van gereedschappen gebruikt in het compilatie proces wordt een toolchain genoemd
- Onderzoeken van gecompileerde bestanden – beschrijft verscheidene nuttige gereedschappen voor het onderzoeken van de inhoud van uitvoerbare bestanden en object bestanden
- Gemeenschappelijke fout berichten – beschrijft de meest voorkomende fout en waarschuwings berichten geproduceerd door gcc en g++. Elk geval gaat vergezeld van een beschrijving van de oorzaken, een voorbeeld en suggesties voor mogelijke oplossingen
- Hulp krijgen – als lezers een probleem tegenkomen dat niet door deze inleiding wordt behandeld, zijn er verschillende referentiehandleidingen die GCC en taal-gerelateerde onderwerpen meer in detail beschrijven
Dit boek is gepubliceerd onder de GNU Free Documentation License.
Lees het boek
Volgende pagina: Pagina 2 – Een Introductie tot C & GUI en meer boeken
Pagina’s in dit artikel:
Pagina 1 – The C Book en meer boeken
Pagina 2 – An Introduction to C & GUI Programming en meer boeken
Pagina 3 – The GNU C Reference Manual en meer boeken
Pagina 4 – Essential C en meer boeken
Pagina 5 – Beej’s Guide to Network Programming en meer boeken
Alle boeken in deze serie:
Free Programming Books | |
---|---|
Java | General-purpose, concurrent, class-based, object-oriented, high-level language |
C | General-purpose, procedural, portable, high-level language |
Python | General-purpose, structured, powerful language |
C++ | General-purpose, portable, free-form, multi-paradigm language |
C# | Combines the power and flexibility of C++ with the simplicity of Visual Basic |
JavaScript | Interpreted, prototype-based, scripting language |
PHP | PHP has been at the helm of the web for many years |
HTML | HyperText Markup Language |
SQL | Access and manipulate data held in a relational database management system |
Ruby | General purpose, scripting, structured, flexible, fully object-oriented language |
Assembly | As close to writing machine code without writing in pure hexadecimal |
Swift | Powerful and intuitive general-purpose programming language |
Groovy | Powerful, optionally typed and dynamic language |
Go | Compiled, statically typed programming language |
Pascal | Imperative and procedural language designed in the late 1960s |
Perl | High-level, general-purpose, interpreted, scripting, dynamic language |
R | De facto standard among statisticians and data analysts |
COBOL | Common Business-Oriented Language |
Scala | Modern, object-functional, multi-paradigm, Java-based language |
Fortran | The first high-level language, using the first compiler |
Scratch | Visual programming language designed for 8-16 year-old children |
Lua | Designed as an embeddable scripting language |
Logo | Dialect of Lisp that features interactivity, modularity, extensibility |
Rust | Ideal for systems, embedded, and other performance critical code |
Lisp | Unique features – excellent to study programming constructs |
Ada | ALGOL-like programming language, extended from Pascal and other languages |
Haskell | Standardized, general-purpose, polymorphically, statically typed language |
Scheme | A general-purpose, functional language descended from Lisp and Algol |
Prolog | A general purpose, declarative, logic programming language |
Forth | Imperative stack-based programming language |
Clojure | Dialect of the Lisp programming language |
Julia | High-level, high-performance language for technical computing |
Awk | Versatile language designed for pattern scanning and processing language |
CoffeeScript | Transcompiles into JavaScript inspired by Ruby, Python and Haskell |
BASIC | Beginner’s All-purpose Symbolic Instruction Code |
Erlang | General-purpose, concurrent, declarative, functional language |
VimL | Powerful scripting language of the Vim editor |
OCaml | The main implementation of the Caml language |
ECMAScript | Best known as the language embedded in web browsers |
Bash | Shell and command language; popular both as a shell and a scripting language |
LaTeX | Professional document preparation system and document markup language |
TeX | Markup and programming language – create professional quality typeset text |
Arduino | Inexpensive, flexible, open source microcontroller platform |
TypeScript | Strict syntactical superset of JavaScript adding optional static typing |
Elixir | Relatively new functional language running on the Erlang virtual machine |
F# | Uses functional, imperative, and object-oriented programming methods |
Tcl | Dynamic language based on concepts of Lisp, C, and Unix shells |
Factor | Dynamic stack-based programming language |
Eiffel | Object-oriented language designed by Bertrand Meyer |
Agda | Dependently typed functional language based on intuitionistic Type Theory |
Icon | Wide variety of features for processing and presenting symbolic data |
XML | Rules for defining semantic tags describing structure ad meaning |
Vala | Object-oriented language, syntactically similar to C# |
Standard ML | General-purpose functional language characterized as “Lisp with types” |
D | General-purpose systems programming language with a C-like syntax |
Dart | Client-optimized language for fast apps on multiple platforms |
Markdown | Plain text formatting syntax designed to be easy-to-read and easy-to-write |
Kotlin | More modern version of Java |
Objective-C | Object-oriented language that adds Smalltalk-style messaging to C |
PureScript | Small strongly, statically typed language compiling to JavaScript |
ClojureScript | Compiler for Clojure that targets JavaScript |
VHDL | Hardware description language used in electronic design automation |