C Language Handledning
Komma igång med C-språk
Sök…
Anmärkningar
C är ett allmänt syfte, nödvändigt datorprogrammeringsspråk, som stöder strukturerad programmering, lexikal variabel räckvidd och rekursion, medan ett statiskt system förhindrar många oavsiktliga operationer. Genom design tillhandahåller C konstruktioner som kartlägger effektivt till typiska maskininstruktioner, och därför har den hittat varaktig användning i applikationer som tidigare hade kodats på monteringsspråk, inklusive operativsystem, samt olika applikationsprogramvara för datorer som sträcker sig från superdatorer till inbäddade system .
Trots dess låga nivåer, var språket utformat för att uppmuntra plattformsprogrammering. Ett standardkompatibelt och portabelt skriven C-program kan sammanställas för ett mycket brett utbud av datorplattformar och operativsystem med få ändringar i dess källkod. Språket har blivit tillgängligt på ett mycket brett spektrum av plattformar, från inbäddade mikrokontroller till superdatorer.
C utvecklades ursprungligen av Dennis Ritchie mellan 1969 och 1973 på Bell Labs och användes för att implementera Unix- operativsystemen igen. Det har sedan dess blivit ett av de mest använda programmeringsspråken genom tiderna, med C-kompilatorer från olika leverantörer tillgängliga för de flesta befintliga datorarkitekturer och operativsystem.
Vanliga kompilatorer
Processen att sammanställa ett C-program skiljer sig mellan kompilatorer och operativsystem. De flesta operativsystem levereras utan en kompilator, så du måste installera ett. Några vanliga val av kompilatorer är:
- GCC, GNU Compiler Collection
- clang: en C-språkfamiljens front-end för LLVM
- MSVC, Microsoft Visual C / C ++ byggverktyg
Följande dokument ska ge dig en bra överblick över hur du kommer igång med att använda några av de vanligaste kompilatorerna:
Support för Compiler C-version
Observera att kompilatorer har olika nivåer av stöd för standard C, med många som fortfarande inte helt stöder C99. Till exempel, från 2015 års utgåva stöder MSVC mycket av C99 men har fortfarande några viktiga undantag för stöd för själva språket (t.ex. förbehandlingen verkar inte överensstämmande) och för C-biblioteket (t.ex. <tgmath.h>
), inte heller dokumenterar de nödvändigtvis sina "implementeringsberoende val". Wikipedia har en tabell som visar support som erbjuds av vissa populära kompilatorer.
Vissa kompilatorer (särskilt GCC) har erbjudit, eller fortsätter att erbjuda, kompilatorförlängningar som implementerar ytterligare funktioner som kompilatorproducenterna anser nödvändiga, hjälpsamma eller tror kan bli en del av en framtida C-version, men som för närvarande inte ingår i någon C-standard. Eftersom dessa tillägg är kompilatorspecifika kan de betraktas som inte tvärkompatibla och kompilatorutvecklare kan ta bort eller ändra dem i senare kompilatorversioner. Användningen av sådana förlängningar kan generellt styras av kompilatorflaggor.
Dessutom har många utvecklare kompilatorer som endast stöder specifika versioner av C som påläggs av den miljö eller plattform som de riktar sig till.
Om du väljer en kompilator, rekommenderas det att välja en kompilator som har det bästa stödet för den senaste versionen av C som är tillåten för målmiljön.
Kodstil (utanför ämnet här):
Eftersom vitt utrymme är obetydligt i C (det vill säga det påverkar inte kodens funktion) använder programmerare ofta vitt utrymme för att göra koden lättare att läsa och förstå, det kallas kodstilen . Det är en uppsättning regler och riktlinjer som används när du skriver källkoden. Den täcker oro som hur linjer ska indragas, om mellanrum eller flikar ska användas, hur hängslen ska placeras, hur rymden ska användas runt operatörer och parenteser, hur variabler ska namnges osv.
Kodstil omfattas inte av standarden och är främst meningsbaserad (olika människor tycker att olika stilar är lättare att läsa), som sådan anses det vanligtvis utanför ämnet på SO. Det övergripande rådet om stil i ens egen kod är att konsistens är av avgörande betydelse - välj, eller gör, en stil och håll dig fast vid den. Det räcker med att förklara att det finns olika namngivna stilar i vanlig användning som ofta väljs av programmerare snarare än att skapa sin egen stil.
Vissa vanliga strecksatser är: K & R-stil, Allman-stil, GNU-stil och så vidare. Vissa av dessa stilar har olika varianter. Allman, till exempel, används som antingen vanlig Allman eller den populära varianten, Allman-8. Information om några av de populära stilarna finns på Wikipedia . Sådana stilnamn är hämtade från de standarder som författarna eller organisationerna ofta publicerar för användning av de många som bidrar till deras kod, så att alla lätt kan läsa koden när de känner till stilen, till exempel GNU-formateringsguiden som utgör en del av GNU-kodningsstandarddokumentet .
Några vanliga namnkonventioner är: UpperCamelCase, LowerCamelCase, Lower_case_with_underscore, ALL_CAPS osv. Dessa stilar kombineras på olika sätt för användning med olika objekt och typer (t.ex. använder makron ofta ALL_CAPS-stil)
K & R-stil rekommenderas vanligtvis för användning i SO-dokumentation, medan de mer esoteriska stilarna, såsom Pico, är avskräckta.
Bibliotek och API: er som inte omfattas av C-standarden (och därför inte är ämne här):
versioner
Version | Standard | Publiceringsdatum |
---|---|---|
K & R | n / a | 1978/02/22 |
C89 | ANSI X3.159-1989 | 1989/12/14 |
C90 | ISO / IEC 9899: 1990 | 1990/12/20 |
C95 | ISO / IEC 9899 / AMD1: 1995 | 1995/03/30 |
C99 | ISO / IEC 9899: 1999 | 1999-12-16 |
C11 | ISO / IEC 9899: 2011 | 2011-12-15 |
Hej världen
För att skapa ett enkelt C-program som skriver ut "Hej, värld" på skärmen använder du en textredigerare för att skapa en ny fil (t.ex. hello.c
- filändelsen måste vara .c
) som innehåller följande källkod:
Hej C
#include <stdio.h>
int main(void)
{
puts("Hello, World");
return 0;
}
Låt oss titta på detta enkla program rad för rad
#include <stdio.h>
Den här raden berättar kompilatorn att inkludera innehållet i standardbibliotekets rubrikfil stdio.h
i programmet. Rubriker är vanligtvis filer som innehåller funktionsdeklarationer, makron och datatyper, och du måste inkludera rubrikfilen innan du använder dem. Denna rad inkluderar stdio.h
så att den kan ringa funktionen puts()
.
int main(void)
Denna rad startar definitionen av en funktion. Den anger namnet på funktionen ( main
), typen och antalet argument som den förväntar sig ( void
, vilket betyder ingen) och vilken typ av värde som den här funktionen returnerar ( int
). Programutförande startar i huvudfunktionen main()
.
{
…
}
De lockiga hängslen används parvis för att indikera var ett kodblock börjar och slutar. De kan användas på många sätt, men i detta fall anger de var funktionen börjar och slutar.
puts("Hello, World");
Den här raden anropar puts()
-funktionen för att mata ut text till standardutdata (skärmen som standard) följt av en ny linje. Strängen som ska matas ut ingår i parenteserna.
"Hello, World"
är strängen som kommer att skrivas på skärmen. I C måste varje strängbokstavligt värde vara inne i de dubbla citaten "…"
.
I C-program måste varje uttalande avslutas av en semikolon (dvs ;
).
return 0;
När vi definierade main()
förklarade vi det som en funktion som returnerar ett int
, vilket betyder att det måste returneras ett heltal. I det här exemplet returnerar vi heltalvärdet 0, som används för att indikera att programmet har avslutat framgångsrikt. Efter return 0;
uttalande kommer exekveringsprocessen att avslutas.
Redigera programmet
Enkla textredigerare inkluderar vim
eller gedit
på Linux eller Notepad
på Windows. Cross-platform redaktörer inkluderar också Visual Studio Code
eller Sublime Text
.
Redaktören måste skapa vanliga textfiler, inte RTF eller något annat format.
Kompilera och köra programmet
För att köra programmet måste den här källfilen ( hello.c
) först sammanställas till en körbar fil (t.ex. hello
på Unix / Linux-system eller hello.exe
på Windows). Detta görs med en kompilator för C-språket.
Kompilera med GCC
GCC (GNU Compiler Collection) är en mycket använt C-kompilator. För att använda den öppnar du en terminal, använder kommandoraden för att navigera till källfilens plats och sedan köra:
gcc hello.c -o hello
Om inga fel finns i källkoden ( hello.c
), kommer kompilatorn att skapa en binär fil, vars namn ges av argument till -o
kommandorad alternativ ( hello
). Detta är den slutliga körbara filen.
Vi kan också använda varningsalternativen -Wall -Wextra -Werror
, som hjälper till att identifiera problem som kan göra att programmet misslyckas eller ger oväntade resultat. De är inte nödvändiga för det här enkla programmet men det är sättet att lägga till dem:
gcc -Wall -Wextra -Werror -o hello hello.c
Använda clang-kompilatorn
För att sammanställa programmet med hjälp av clang
du använda:
clang -Wall -Wextra -Werror -o hello hello.c
Genom design, clang
kommandoradsalternativ liknar dem i GCC.
Använda Microsoft C-kompilatorn från kommandoraden
Om du använder Microsoft cl.exe
kompilatorn i ett Windows-system som stöder Visual Studio och om alla miljövariabler är inställda kan detta C-exempel kompileras med följande kommando som ger en körbar hello.exe
i katalogen som kommandot körs i (Det finns varningsalternativ som /W3
för cl
, ungefär analogt med -Wall
etc för GCC eller clang).
cl hello.c
Utför programmet
När den har kompilerats kan den binära filen sedan ./hello
genom att skriva ./hello
i terminalen. Vid körning kommer det sammanställda programmet att skriva ut Hello, World
följt av en ny linje till kommandotolken.
Original "Hej, världen!" i K&R C
Följande är originalet "Hej, världen!" program från boken The C Programming Language av Brian Kernighan och Dennis Ritchie (Ritchie var den ursprungliga utvecklaren av C-programmeringsspråket på Bell Labs), kallad "K&R":
#include <stdio.h>
main()
{
printf("hello, world\n");
}
Lägg märke till att C-programmeringsspråket inte standardiserades vid skrivandet av den första utgåvan av denna bok (1978), och att detta program antagligen inte kommer att kompilera på de flesta moderna kompilatorer såvida de inte instrueras att acceptera C90-kod.
Detta första exempel i K & R bok anses nu vara dålig kvalitet, bland annat eftersom den saknar en uttrycklig returtyp för main()
, dels eftersom den saknar en return
uttalande. Den andra upplagan av boken skrevs för den gamla C89-standarden. I C89 skulle typ av main
standard vara int
, men K & R-exemplet returnerar inte ett definierat värde till miljön. I C99 och senare standarder typen avkastning som krävs, men det är säkert att lämna ut return
uttalande main
(och enda main
), på grund av ett specialfall introduceras med C99 5.1.2.2.3 - det motsvarar att återvända 0 , vilket indikerar framgång.
Den rekommenderade och mest bärbara formen för main
för värdade system är int main (void)
när programmet inte använder några kommandoradsargument, eller int main(int argc, char **argv)
när programmet använder kommandoradsargumenten.
C90 §5.1.2.2.3 Programuppsägning
En återgång från det första samtalet till den
main
funktion är likvärdigt med att ringaexit
funktionen med värdet som returneras avmain
funktion som dess argument. Ommain
utför en avkastning som anger inget värde, är avslutningsstatus returneras till värdmiljön odefinierad.
C90 §6.6.6.4 Den return
uttalande
Om en
return
uttalande utan ett uttryck utförs, och värdet av funktionen samtalet används av den som ringer, är beteendet odefinierat. Nå}
som avslutar en funktion motsvarar att köra enreturn
uttalande utan ett uttryck.
C99 §5.1.2.2.3 Programuppsägning
Om retur typen av
main
är en typ kompatibel medint
, en retur från det första samtalet tillmain
motsvarar anropa funktionenexit
funktion med värdet som returneras avmain
funktion som dess argument; når}
som avslutarmain
returnerar värdet 0. Om returtypen inte är kompatibel medint
, är avslutningsstatus returneras till värdmiljön ospecificerad.