C is een algemene, procedurele programmeertaal die invloedrijk is geweest in de ontwikkeling van veel moderne programmeertalen. Ontworpen om efficiënt en flexibel te zijn, wordt het vaak gebruikt voor systeemprogrammering, het ontwikkelen van besturingssystemen en het creëren van applicatiesoftware. C biedt laagdrempelige toegang tot geheugen en maakt bitmanipulatie mogelijk, waardoor het een voorkeurskeuze is voor het schrijven van prestatiekritische software.
C werd in de vroege jaren 1970 ontwikkeld door Dennis Ritchie bij Bell Labs als een evolutie van de B-taal, die beïnvloed was door BCPL en ALGOL. Oorspronkelijk was het bedoeld voor systeemprogrammering op het Unix-besturingssysteem, dat ook bij Bell Labs is ontstaan. Het ontwerp van de taal richtte zich op het bieden van een hoge abstractie bovenop assemblytaal, terwijl de efficiëntie van laagdrempelige programmering behouden bleef.
Tegen het einde van de jaren 1970 kreeg C brede acceptatie in de programmeergemeenschap, en de publicatie van "The C Programming Language" door Brian Kernighan en Dennis Ritchie in 1978 droeg aanzienlijk bij aan de populariteit ervan. De eerste gestandaardiseerde versie, genaamd C89 of ANSI C, werd in 1989 aangenomen door het American National Standards Institute (ANSI). De International Organization for Standardization (ISO) nam het later over, wat resulteerde in ISO C99 in 1999, dat verschillende nieuwe functies introduceerde, zoals inline functies en arrays met variabele lengte. De meest recente belangrijke standaard, C11, werd gepubliceerd in 2011, en C18, een bugfix-release, volgde in 2018.
C blijft een van de meest gebruikte programmeertalen ter wereld, vooral in systeemprogrammering, embedded systemen en high-performance applicaties. De syntaxis en concepten hebben veel andere talen beïnvloed, waaronder C++, C#, Java en Objective-C. De voortdurende relevantie is te zien in besturingssystemen (Linux, Windows), netwerkprogrammering, embedded systemen en verschillende taken op het gebied van high-performance computing.
C staat directe manipulatie van geheugen toe via pointers. Bijvoorbeeld:
int x = 10;
int *p = &x; // Pointer p bevat het adres van x
C ondersteunt gestructureerd programmeren via functies, wat code modulariteit mogelijk maakt. Een eenvoudige functiedefinitie ziet er als volgt uit:
void greet() {
printf("Hallo, Wereld!\n");
}
C bevat verschillende controle stroomstructuren zoals if, switch, for, while en do-while, die besluitvorming vergemakkelijken.
if (x > 0) {
printf("Positief getal\n");
}
C heeft verschillende ingebouwde gegevenstypen: int, char, float, double, enz. Het ondersteunt ook door de gebruiker gedefinieerde gegevenstypen met behulp van structuren.
struct Point {
int x;
int y;
};
C bevat een rijke set bibliotheken voor invoer/uitvoeroperaties, tekenmanipulatie en wiskundige berekeningen.
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C staat expliciete typecasting toe, wat nuttig is voor het converteren tussen types.
double pi = 3.14;
int intPi = (int)pi; // intPi zal 3 zijn
C ondersteunt enumerated types voor het creëren van aangepaste types.
enum Color { ROOD, GROEN, BLAUW };
C bevat preprocessor directieven zoals #define, #include, die code voor de compilatie verwerken.
#define PI 3.14
C staat variabele declaraties binnen een specifieke scope toe, wat de encapsulatie verbetert.
{
int temp = 5; // temp is alleen geldig binnen dit blok
}
C ondersteunt geen functie-overloading zoals C++, maar het staat standaardargumenten toe via handmatige implementatie.
int add(int a, int b) {
return a + b;
}
C vereist een compiler om de broncode om te zetten in machinecode. De meest populaire compilers zijn GCC (GNU Compiler Collection), Clang en MSVC (Microsoft Visual C++).
Om een C-programma te compileren, kun je doorgaans een commando zoals het volgende gebruiken:
gcc -o myprogram myprogram.c
Dit compileert myprogram.c
naar een uitvoerbaar bestand genaamd myprogram
.
Verschillende IDE's ondersteunen C-programmering, zoals:
Deze IDE's bieden functies zoals syntaxisaccentuering, debuggingtools en projectbeheer.
C wordt op grote schaal gebruikt in verschillende domeinen, waaronder:
C wordt vaak vergeleken met verschillende andere programmeertalen, omdat het overeenkomsten vertoont en als basis dient voor velen:
C kan gemakkelijk worden vertaald naar talen die procedurele programmeerconstructies en laagdrempelige optimalisaties ondersteunen. Bij het vertalen van C-code naar een hogere programmeertaal moeten ontwikkelaars letten op de verschillen in geheugenbeheer, aangezien hogere programmeertalen vaak garbage collection hebben.
Verschillende bron-naar-bron vertaaltools kunnen helpen bij het converteren van C-code naar andere talen, waaronder: