C er et generelt formål, procedurelt programmeringssprog, der har haft stor indflydelse på udviklingen af mange moderne programmeringssprog. Designet til at være effektivt og fleksibelt, bruges det ofte til systemprogrammering, udvikling af operativsystemer og oprettelse af applikationssoftware. C giver lavniveau adgang til hukommelse og muliggør bitmanipulation, hvilket gør det til et foretrukket valg til at skrive ydeevne-kritisk software.
C blev udviklet i begyndelsen af 1970'erne af Dennis Ritchie hos Bell Labs som en evolution af B-sproget, som var påvirket af BCPL og ALGOL. Oprindeligt var det beregnet til systemprogrammering på Unix-operativsystemet, som også stammer fra Bell Labs. Sprogets design fokuserede på at give en høj-niveau abstraktion over assembler-sprog, samtidig med at effektiviteten af lavniveau programmering blev bevaret.
I slutningen af 1970'erne fik C bred adoption i programmeringssamfundet, og udgivelsen af "The C Programming Language" af Brian Kernighan og Dennis Ritchie i 1978 bidrog betydeligt til dets popularitet. Den første standardiserede version, kaldet C89 eller ANSI C, blev vedtaget af American National Standards Institute (ANSI) i 1989. Den Internationale Standardiseringsorganisation (ISO) vedtog det senere, hvilket resulterede i ISO C99 i 1999, som introducerede flere nye funktioner som inline-funktioner og variabel-længde arrays. Den seneste store standard, C11, blev offentliggjort i 2011, og C18, en fejlrettelsesudgivelse, fulgte i 2018.
C forbliver et af de mest anvendte programmeringssprog i verden, især inden for systemprogrammering, indlejrede systemer og højtydende applikationer. Dets syntaks og koncepter har påvirket mange andre sprog, herunder C++, C#, Java og Objective-C. Dets fortsatte relevans kan ses i operativsystemer (Linux, Windows), netværksprogrammering, indlejrede systemer og forskellige højtydende beregningsopgaver.
C tillader direkte manipulation af hukommelse gennem pegepunkter. For eksempel:
int x = 10;
int *p = &x; // Pointer p holder adressen til x
C understøtter struktureret programmering gennem funktioner, hvilket muliggør kode-modularitet. En simpel funktionsdefinition ser sådan ud:
void greet() {
printf("Hej, Verden!\n");
}
C inkluderer forskellige kontrolflow-strukturer som if, switch, for, while og do-while, som letter beslutningstagning.
if (x > 0) {
printf("Positivt tal\n");
}
C har flere indbyggede datatyper: int, char, float, double osv. Det understøtter også brugerdefinerede datatyper ved hjælp af strukturer.
struct Point {
int x;
int y;
};
C inkluderer et rigt sæt biblioteker til input/output-operationer, strengmanipulation og matematiske beregninger.
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C tillader eksplicit type casting, hvilket er nyttigt til konvertering mellem typer.
double pi = 3.14;
int intPi = (int)pi; // intPi vil være 3
C understøtter enumererede typer til at oprette brugerdefinerede typer.
enum Color { RØD, GRØN, BLÅ };
C inkluderer forbehandler direktiver som #define, #include, som håndterer kode før kompilering.
#define PI 3.14
C tillader variabeldeklarationer inden for et specifikt scope, hvilket forbedrer indkapslingen.
{
int temp = 5; // temp er kun gyldig inden for denne blok
}
C understøtter ikke funktions overbelastning som C++, men det tillader standardargumenter via manuel implementering.
int add(int a, int b) {
return a + b;
}
C kræver en kompilator til at omdanne kildekode til maskinkode. De mest populære kompilatorer inkluderer GCC (GNU Compiler Collection), Clang og MSVC (Microsoft Visual C++).
For at kompilere et C-program kan du typisk bruge en kommando som:
gcc -o myprogram myprogram.c
Dette kompilerer myprogram.c
til en eksekverbar fil kaldet myprogram
.
Flere IDE'er understøtter C-programmering, såsom:
Disse IDE'er tilbyder funktioner som syntaksfremhævning, fejlfinding og projektstyring.
C bruges i vid udstrækning inden for forskellige domæner, herunder:
C sammenlignes ofte med flere andre programmeringssprog, da det deler ligheder og fungerer som en grundlag for mange:
C kan nemt oversættes til sprog, der understøtter procedurelle programmeringskonstruktioner og lavniveau optimeringer. Når man oversætter C-kode til et højere niveau sprog, bør udviklere være opmærksomme på forskelle i hukommelsesstyring, da højere niveau sprog ofte har garbage collection.
Flere kilde-til-kilde oversættelsesværktøjer kan hjælpe med at konvertere C-kode til andre sprog, herunder: