=========== C - Programmering Amiga OS 2.xx ==================== Av Kjell Cederfeldt. Del 3. Söndag den 12 April 1992. -------------------------------- Vad är en funktion ? -------------------- Ett C program består en en eller flera "funktioner" som utgör de grunläggande modulerna i varje program. Man ser lätt en funktion på de efterföljande parenterserna, main() är således en funktion. Den först anropade funktionen i ett C program heter alltid main(). Ett C program MÅSTE alltid innehålla en funktion som heter main. Parenteserna användas för att innesluta information som överförs till funktionen. Om ingen information anges måste ändå parenteserna finnas för att ange att det är en funktion. Klamrar {} markerar början och i slutet av en funktion. OBS endast klamrar kan användas, inte hakar [] eller parenteser (). Mellan klamrarna skrivs den del av programmet som funkionen skall utföra. Man kan nästan likna en funktion som en subrutin. Mer om funktioner senare. Här kommer ett exempel till. ---------------------------- #include main() /* Ett kort exempel */ { int num; num = 1; printf("Amiga kommer "); printf("på plats nr %d av alla datorer.\n", num); } Ge programmet ett namn. Kanske 'första.c' kan vara ett trevligt namn. Vi kompilerar programmet (efter att ha sparat det), med: LC -L första.c Progrmmet startar vi genom att skriva första. Vad händer tror ni? Just det: Amiga kommer på plats nr 1 av alla datorer. Här kommer en förklaring. ------------------------- #include Filen med namnet stdio..h skall tas med. Denna fil ingår normalt i alla C-kompilatorpaktet. Filen innehåller information om in och utmatning. (ex: mellan CLI fönstret och programmet.) Namnet kommer från STandarD Input/Output Header, vilket betyder standardiserad huvudfil för in- och utmantning. Det är vanligt att man har en samling av inledande "huvudfiler" (headerfiles). Denna är den vanligaste och måste nästan alltid vara med. Det tillhör en god programmeringssed att alltid ha den med. Det är svårt att veta vilka huvudfiler man måste ha med. Men det är inget fara med att ta med förmånga eller att ha med huvudfiler som inte används eftersom det inte inkluderas om det inte fyller någon funktion. Detta är ingen rad i C-språket! Symbolen # anger att detta är en rad som skall hanteras av "förprocessorn" i C. Som namnet antyder sköter förprocessorn om vissa uppgifter innan kompilatorn gör sin del. Mer om förprocessor-instruktioner kommer vi till längre fram. main() Detta är alltså den den första anropade funktionen. Den MÅSTE heta main. Vi ser att det är en funktion på parenteserna. Vi överför ingen information till funktionen main. Därför blir det tomt mellan parenteserna till main. /* Ett kort exempel */ En kommentar startas med /* och avslutas med */. Det som står mellan kommentarstecknen tas inte med vid kompileringen och därför inte heller i programmet. En riktig programmerare skiver kommentarer i sitt program. Det är alltid en bra och god programmeringssed att skriva kommentarer i programmet. { och } En inledande klammer anger att här börjar funktionens huvuddel. I mellan den inledande och avsludande klammern står programmets alla programsatser. Den avslutande klammern anger att funktionen avslutas. En programsats avslutas med ett semikolon ;. int num; En av de viktigaste detaljerna i C är "deklarationssatsen" Alla variabler måste deklareras. I exemplet deklarerar vi att vi har en variabel som heter num och att den skall vara av typen int som står för integer (heltal). Semikolonet i slutet av raden anger att raden är en programsats. Alltså inte bara ett skilje tecken mellan satser som i tex. pascal. Semikolonet är en del av satsen. Ordet int är ett "nyckelord" i C. Ett nyckelord har en bestämd betydelse. Det kan inte stå inne istället för int eftersom int har en viss betydlese. Int betyder int och inget annat. Int är en datatyp. Vid deklarationen av num får alltså variabeln num variabeltypen int. Num är inget nyckelord, vi kunde lika gärna kallat num för tal. (Det skulle i så fall stått tal på alla ställen där det nu står num). I C måste alla variabler deklareas. Man måste ange vilken typ varje variabel skall ha. Man kan inte deklarera variabler var som helst. Mer om detta senare. En variabelnamn kan inte innehålla villka namn som helst. Giltiga namn Ogiltiga namn ------------------------------------------------------- nisse $z>^** katt2 2katt Varm_bad Varm-bad _kcaB Hans'es num = 1; Här får variabeln num ett värde. I detta fall tilldelas variabeln num värdet 1. Vi avslutar denna programsats med ett semikolon. printf("Amiga kommer "); printf är ett funktionsanropp som skriver ut texten som står i mellan parenteserna. Parenteserna anger att printf är en funktion. Lägg märke till att det inte finns några klamrar efter funktionen printf som förklarar vad den innehåller. Hur skall vi då kunna få printf att fungera? Printf är en funktion som ingår i de flesta C-kompilatorpaket. Denna funktion beskrivs alltså inte i vårt program utan finns beskriven någon annanstans. Detta är en av fördelarna med C som gör C så kraftfullt. Kompilatorn ser alldrig om det finns en funktion som heter printf eller inte. Den litar blint på att vi vet det. När vi länkar programmet länkas printf automatiskt med. Vad som länkas med och när förklarar jag senare. Printf skriver ut texten som står mellan parenteserna. detta är alltså den information som skickas till funktionen fprint. Eftersom texten i detta fall är en konstant, skrivs den omgiven av sitationstecken. Man skulle alltså kunnat skicka en variabel. Då skulle man i så fall inte haft några sitations- tecken. Även här anges ett semikolon efter funktionen för att ange att det är en programsats till funktionen main. printf("på plats nr %d av alla datorer.\n", num); Ännu en printf funktion som fungerar enligt ovan. Men mellan parenteserna har vi inte ett argument som i printf funktionen ovan, utan två argument. Vi skickar alltså två olika informationer till funktionen printf. Det ena argumentet är "på plats nr %d av alla datorer.\n". Det andra argumentet är num. Ett kommatecken skiljer det första och det andra argumentet åt. Det första argumentet ser nästan likadant ut. Det som skiljer är %d och \n. I det första argumentet finns %d med. När programmet kördes, byttes %d ut mot 1. Men %d anger man hur man vill presentera det andra argumentet som i detta fall var num. Num är ju ett heltal och har värdet ett. Genom att sätta tecken- gruppen %d talar vi om att det är just där som varibeln skall presenteras. Presentationssättet blir decimalt. Teckengruppen %d står just för decimalt. Teckenet % betyder att här på denna plats skall en variabel skrivas ut. Och d att det rör sig om en siffra (ett heltal). Funktionen printf() ger många möjligheter (format) för utskrift av variabler. Även denna rad slutar med ett semikolon. Varför? Och vad är nu en variabel? -------------------------- Ett av de tyngsta begreppen inom programmering. En variabel är en slags minnescell innehållande ett värde. Man kan likna det vid miniräknarens minne. På många miniräknare kan man spara undan ett värde i minnet medans man räknar ut ett annat. Antag att vi på vår miniräknare hade många sådana minnen. Vi kallar varje minne för ex. num, tal, värde osv... Detta är just vad en variabel är. Antag att vi skall skriva ett program som frågar vad en person heter och sedan svara Hej och namnet på personen. Vi kan inte när vi skriver veta namnet på alla personer som kommer att använda programmet och det skulle dessutom blivit onödigt stort. Vi behöver allså kunna variera namnet som skrivs ut. Eftersom vi skriver in ett namn kan vi lagra ner detta namn i en minnescell för att senare kunna använda det. När vi behöver ha värdet ur minnescellan hämtar vi det. Men beroende på om vi skall spara tal eller tecken behöver vi olika "minnescell-typer". En för tal och en för tecken. Programm- språket C har flera olika typer. Mer om dessa senare. Strukturen i ett enkelt program -------------------------------- INLEDNING --------- #include <----------> Förprocessorinstruktioner main() <--------------------> Funktionsnamn med argument HUVUDDEL -------- { int num; <-----------------> Delkarationssats num = 1; <-----------------> Tilldelningssats printf("Amiga är <---------> Funtionssats nummer %d\n", num); } När vi nu har förklarat ett program mer noggrant, skulle det kanske vara roligt att testa att skriva ett nytt, för att se vad det gör. @BEGIN_FILE_ID.DIZVery good C Guide in swedish. @END_FILE_ID.DIZ