C (programmeringsspråk)

Bakgrunn

Programmeringsspråket C ble opprinnelig utviklet av Dennis Ritchie ved AT&T Bell Laboratories fra 1969 til 1973. Den mest kreative perioden var i 1972. Språket ble kalt «C», fordi det var avledet av det tidligere programmeringsspråket B, som ble utviklet av Ken Thompson i 1969. Språket «B» var igjen en forenklet versjon av programmeringsspråket BCPL, som ble utviklet av Martin Richards i 1966.
Opprinnelsen til C henger nøye sammen med utviklingen av operativsystemet UNIX. UNIX ble utviklet på minidatamaskinen PDP-7 av Ritchie og Thompson i 1969. UNIX var skrevet i assemblerspråk, og da Ritchie og Thomson i 1970 besluttet seg for å portere operativsystemet til minidatamaskinen PDP-11, oppdaget de raskt behovet for et portabelt språk. Programmeringsspråket B ble tatt i bruk på PDP-7 og PDP-11, men utnyttet ikke alle egenskapene til PDP-11, deriblant mulighetene til å adressere bytes.
De tre første versjonene av forsknings-Unix for PDP-11 var også skrevet i assemblerspråk; den første C-kompilatoren ble lansert sammen ved versjon den 12. juni 1972. I november 1973 var det meste av operativsystemkjernen til versjon 4 av forsknings-Unix omskrevet i C. Dette var det tredje operativsystemet som ble implementert i et annet språk enn assemblerspråk. Tidligere var operativsystemet Multics blitt skrevet i PL/I fra 1964 til 1969. Operativsystemet Master Control Program for stormaskinen Burroughs B5000 ble skrevet i Algol 60 i 1961.

ANSI C og ISO C

På slutten av 1970-årene og i 1980-årene økte programmeringsspråkets popularitet betraktelig. Det ble laget C-kompilatorer for stormaskiner, minidatamaskiner og mikrodatamaskiner, deriblant IBM Personal Computer og dens etterfølgere som var basert på x86-arkitekturen.
I 1983 opprettet American National Standards Institute (ANSI) komitéen X3J11 for å utforme en standard-spesifikasjon for C. Standarden ble godkjent i 1989, og publisert i 1990 som ANSI X3.159-1989 Programming Language C. Den blir omtalt som ANSI C, Standard C og C89. I 1990 ble ANSI C adoptert av International Organization for Standardization (ISO) som ISO/IEC 9899:1990, og blir derfor noen ganger også omtalt som C90. Liksom tilfellet er med andre nasjonale standardorganisasjoner, videreutvikler ikke ANSI lenger noen C-standard. Standardiseringen skjer idag i regi av ISO.
Et av formålene med standardiseringen av C var å skape et superset av K&R C, hvor det ble inkorporert mange uoffisielle egenskaper som etterhvert ble introdusert. Standardkomitéen inkluderte også flere tilleggsegenskaper som funksjonprototyper (hentet fra C++), void pekere, støtte for internasjonale tegnsett og lokale parametre og forbedringer av preprosessoren. Syntaksen for parameter-deklarasjoner ble endret til den samme stilen som i C++, men av kompatibilitetshensyn var den gamle K&R syntaksen fortsatt lovlig.
C89/C90 støttes av nåværende C-kompilatorer, og det meste av C-kode som skrives idag er basert på denne standarden. Ethvert program som er skrevet i Standard C uten noen maskinavhengige og operativsystemspesifikke referanser, vil kunne kjøre på ulike plattformer. Når det benyttes ikke-standardiserte biblioteker som f.eks. biblioteker for Grafiske brukergrensesnitt eller biblioteker med plattformspesifikke attributter, er rekompileringer nødvendige for å tilpasse programvaren den rette endian byterekkefølgen.
I tilfeller hvor koden må være kompatibel med både K&R C og standard C, kan makroen __STDC__ bli benyttet for å lage seksjoner i koden som bare består av standard C.

«Hello, world»-eksempel

Et enkelt og vanlig eksempel på kodesnutter i programmeringsspråk er å skrive ut beskjeden «Hei, verden!» til skjermen.
#include <stdio.h>int main(void){
    printf("Hei, verden!\n");

    return 0;}

Løkkeeksempler

Et eksempel på en «while»-løkke som går uendelig mange ganger rundt og skriver ut «Hallo verden!» like mange ganger.
#include <stdio.h>int main(void){
    while (1)
    {
        printf("Hallo, verden!\n");
    }
    return 0;}
Et eksempel på en «while»-løkke som går 10 ganger rundt og skriver ut rundenummeret like mange ganger.
#include <stdio.h>int main(void){
    int i = 0; // rundeteller
    while (i < 10)
    {
        printf("while %d\n", i);
        i++;
    }
    return 0;}
Et eksempel på en «for»-løkke som går 10 ganger rundt og skriver ut verdien av rundetelleren like mange ganger.
#include <stdio.h>int main(void){
    int i;  // rundeteller
    for (i = 0; i < 10; i++)
    {
        printf("runde: %d\n", i);
    }
    return 0;}

«Hvis/dersom»-eksempel

Et eksempel på en «if/else» betingelse som sammenligner verdiene av x og y.
#include <stdio.h>int main(void){
    int x=1;
    int y=3;

    if (x < y)
    {
        printf("x er mindre enn y\n");
    }
    else if (x > y)
    {
        printf("x er større enn y\n");
    }
    else
    {
        printf("x og y er like store\n");
    }

    return 0;}