C (programspråk)

Från Rilpedia

Version från den 17 maj 2009 kl. 08.31 av Pka (Diskussion)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

C är ett av de vanligaste programspråken idag tillhörande familjen av Algol-baserade språk, utvecklat vid AT&T Bell Labs 1973. C var en utveckling av det typlösa språket B. B var i sin tur en syntaktiskt förändrad och minimalistisk variant av BCPL (Basic CPL), som i sin tur var ett starkt förenklat CPL (Common Programming Language). Det var B som introducerade det mesta av den speciella syntax (dubblerade lika-med för jämförelser etc) som kännetecknar C och dess (syntaktiska) efterföljare som Java och C#. Drivande bakom utvecklingen av C var Dennis M. Ritchie, som också är medförfattare till boken The C Programming Language. Av alla programspråk är kanske C det som haft störst inflytande på programvaruindustrin. Det finns knappast någon del av programvaruvärlden där C inte används eller använts.

Kring tiden då C utvecklades (1972 och framåt) förenade det en tillräcklig abstraktionsnivå med god effektivitet. Språket hade ursprungligen en nästan lika svag typning som assembler (heltal kunde användas som pekare bla), något som delvis stramades upp mot slutet av 1970-talet (men fortfarande kunde t.ex tecken och heltal blandas fritt). ISO-standarden införde senare en nästan lika stark typning som i t.ex språket Pascal, men med bibehållen möjlighet att - dock nu uttryckligen - konvertera mellan typer nästan hur som helst. Det har varit en av anledningarna till C:s popularitet att även konstruktioner som anses riskabla finns med i språket, som till exempel okontrollerade manuella pekare. Även om kod skriven i C inte alltid är lätt att förstå så klarar språket att uttrycka det mesta som andra procedurella programspråk klarar, och kan dessutom delvis ersätta assembler.

Att C utvecklades hand i hand med UNIX gav språket en mycket stark ställning inom UNIX-industrin, vilken hållit i sig sedan dess. C är alltjämt mycket använt i exempelvis GNU/Linux (vars kärna är skriven huvudsakligen i C). C blev tidigt det dominerande språket för utveckling på Microsoft Windows-plattformen men har där i stor utsträckning trängts undan av C++ och Visual Basic. För inbyggda system har C alltjämt en mycket stark ställning, och för många hårdvarunära tillämpningar är C fortfarande det dominerande språket. Starkt bidragande är att C-kompilatorer finns tillgängliga för de flesta arkitekturer.

Programspråket C är standardiserat av ISO. Som alla andra ISO-standarder så revideras den regelbundet. Den första standarden blev klar år 1989 och kallas ibland C89 (officiell beteckning "ISO/IEC 9899:1990", eftersom ISO gav ut den först år 1990). År 1999 blev nästa revision av standarden klar, och den brukar kallas C99 (officiell beteckning "ISO/IEC 9899:1999").

C är också grunden för det välkända objektorienterade språket C++ där konstruktioner hämtade från Simula 67 adderades till C på ett bakåtkompatibelt sätt, vilket resulterat i ett relativt invecklat språk. C++ har i sin tur inspirerat till språk som Java, C#, och många andra.

Programexempel

"Hello, World!" i C:

 #include <stdio.h>
 
 int main(void)
 {
     printf("Hello, world!\n");
     return 0;
 }

Ett annat, och simplare sätt att skriva koden "Hello, World!" i C på:

 main()
 {
     write(1, "hello, world\n", 13);
     /* Använd _write (eller write om det är definierat) för windows, 
        ersätt 1 med stdout och inkludera io.h                        */
 }

Ett program där vi kan titta på givna intervaller av multiplikation av ett givet tal i:

 #include <stdio.h>
 
 int main (int argc, const char * argv[]) {
 	int raknare, lagsta, hogsta; 
 	/*
 	raknare = En räknare för att hålla koll på vilken rad vi är på vid utskriften.
 	lagsta = Vårt lägsta värde på i. Med detta värde på i ska utskriften starta.
 	hogsta = Vårt högsta värde på i. Efter i = n ska utskriften sluta.
 	*/
 	printf("Ange lägsta värdet på i: ");
 	scanf("%i", &lagsta); /* Vad ska lägsta värdet på i vara? */
 	printf("Ange högsta värdet på i: ");
 	scanf("%i", &hogsta); /* Vad ska största värdet på i vara? */
 
 	printf("\n           i          i*i        i*i*i\n"
 		 "============ ============ ============\n");
 
 	for (raknare = lagsta; raknare <= hogsta; raknare++) { /* Upprepning av utskriften. */
 		printf("%12i ", raknare); /* Utmatning av i^1. */
 		printf("%12i ", raknare*raknare); /* Utmatning av i^2. */
 		printf("%12i\n", raknare*raknare*raknare); /* Utmatning av i^3. */
 	}
 
 	return 0; /* Allt OK. Avslutar programmet. */
 }

Samma program som ovan, men där vi istället anropar funktionerna kvad() och kub() föt att räkna ut i^2 och i^3:

 #include <stdio.h>
 
 int kvad(int x) { /* Kvadrerar det värde som funktionen matas med. */
 	return (x * x);
 }
 
 int kub(int x) { /* Kuberar det värde som funktionen matas med. */
 	return (x * x * x);
 }
 
 int main (int argc, const char * argv[]) {
 	int raknare, lagsta, hogsta, kvadrat, kubik; 
 	/*
 	raknare = En räknare för att hålla koll på vilken rad vi är på vid utskriften.
 	lagsta = Vårt lägsta värde på i. Med detta värde på i ska utskriften starta.
 	hogsta = Vårt högsta värde på i. Efter i = n ska utskriften sluta.
 	*/
 	printf("Ange lägsta värdet på i: ");
 	scanf("%i", &lagsta); /* Vad ska lägsta värdet på i vara? */
 	printf("Ange högsta värdet på i: ");
 	scanf("%i", &hogsta); /* Vad ska största värdet på i vara? */
 
 	printf("\n           i          i*i        i*i*i\n"
 		 "============ ============ ============\n");
 
 	for (raknare = lagsta; raknare <= hogsta; raknare++) { /* Uprepning av utskriften. */
 		printf("%12i ", raknare); /* Utmatning av i^1. */
 
 		kvadrat = kvad(raknare);
 		printf("%12i ", kvadrat); /* Utmatning av i^2. */
 
 		kubik = kub(raknare);
 		printf("%12i\n", kubik); /* Utmatning av i^3. */
 	}
 
 	return 0; /* Allt OK. Avslutar programmet. */
 }

Ett program som matar ut tal (1 till 10) uttryckt i kvadrat och kubik och visar högerjusterat.

#include <stdio.h>
 
main()
{
    int i;
 
    for(i = 1; i <= 10; i++)
        printf("%8d %8d %8d\n", i, i*i, i*i*i);
}

Se även

Externa länkar

Wikibooks-logo.svg
Wikibooks har relaterade böcker. Se: Programmering i ANSI-C
Personliga verktyg