Læring C: A Primer

Learning C: A Primer
4
Del
17
Del
Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Dette innlegget er en del av en serie som heter Lær iOS SDK Development Fra Scratch.Creating ditt første iOS ApplicationGetting gang med Objective-C

Du har kanskje hørt at du må være kjent med Objective- C hvis du planlegger å utvikle iOS applikasjoner. Mens Objective-C er faktisk en viktig del av iOS utvikling, folk har en tendens til å glemme at Objective-C er en streng overordnet sett C. Med andre ord, er det også viktig å være kjent med grunnleggende av C som en iOS-utvikler. Ikke bekymre deg om. Hvis du allerede vet det grunnleggende programmering, vil C ikke være for vanskelig å plukke opp.



Forutsetninger

Det er ikke mulig å dekke grunnleggende programmering og lære C i en artikkel. Jeg er derfor forutsatt at du allerede har noen erfaring med programmering. Ruby, PHP eller Javascript er gode utgangspunkt for å lære C og Objective-C, så hvis du kommer fra et webutvikling bakgrunn bør du ikke ha problemer med å lære det grunnleggende C ved å lese denne artikkelen.

I denne artikkelen vil jeg fokusere på hva som gjør C unikt eller annerledes enn andre programmeringsspråk. Dette betyr at jeg ikke vil dekke grunnleggende programmering konsepter og mønstre, for eksempel variabler og sløyfer. Hva jeg vil dekke er hvordan variabler deklareres i C og hva pekere er. Med andre ord ligger det fokus på de tingene du trenger å vite for å bli kjent med C.

Introduksjon

Dennis Ritchie startet å utvikle C på slutten av 1960-tallet mens du arbeider på AT & T Bell Labs . Takket være sin omfattende bruk og enkelhet av design, kan C brukes på nesten alle plattformer. Det er ikke knyttet til ett operativsystem eller plattform. Hvis du har utforsket andre programmeringsspråk, da du kanskje har lagt merke til at de deler mange likheter. Mange språk har blitt inspirert av C, for eksempel C #, Java, PHP og Python.

Dennis Ritchie kalte sin nye språket C fordi han tok litt inspirasjon fra en tidligere språk utviklet av Ken Thompson kalt B. Til tross for At C er inspirert av typeless språk (Martin Richards 'BCPL og Ken Thompson B), C er et maskinskrevet språk. Jeg vil dekke skrive i mer detalj senere i denne artikkelen.

Det tar ikke lang tid å lære det grunnleggende C, fordi det er et relativt lite språk med bare et lite sett med søkeord. Du kan si at C er veldig nakne bein og tilbyr bare det som er virkelig nødvendig. Annen funksjonalitet, for eksempel input /output operasjoner er delegert til bibliotekene. Heap og søppelrydding er fraværende i C og bare en grunnleggende form for modularitet er mulig. Imidlertid har den lille størrelsen av språket den fordelen at det kan læres raskt.

Til tross for at C er et lavt nivå språk, er det ikke vanskelig å lære, eller bruk. Mange iOS og Mac-utviklere har blitt så vant til Objective-C og dens objektorientert design som de er redd for å prøve å jobbe med "rette" C eller C-biblioteker. Objective-C er en streng supersett av C og noe mer enn et lag på toppen av C.

Øvelse gjør mester

Et programmeringsspråk er best lært ved å praktisere, så la oss lage et nytt prosjekt i Xcode og skrive noen få linjer med C for å bli kjent med språket. Lansere Xcode og opprette et nytt prosjekt ved å velge New > Prosjekt ... fra Fil-menyen.

Vi vil ikke lage en iOS-applikasjon som vi gjorde tidligere i denne serien. I stedet vil vi lage en OS X prosjekt. Velg applikasjon i delen OS X og velge Command Line Tool danne listen over maler på høyre side. Klikk på Neste for å fortsette.

Navnet ditt prosjekt C Primer og gi det et organisasjonsnavn og firma identifikator som vi så tidligere. Sett Type nedtrekksmenyen til C. Det eneste konfigurasjon alternativet som virkelig betyr noe for denne opplæringen er den typen. Ikke bry deg om de andre alternativene for nå. Klikk på Neste for å fortsette.

Fortell Xcode hvor du vil lagre den nye Xcode prosjekt. Det er ikke nødvendig å opprette en git repository for dette prosjektet. Vi vil bare bruke dette prosjektet for å lære C i stedet for å skape et nyttig kommandolinjeverktøy.

Prosjektoversikt

I sammenligning med iOS-applikasjon som vi opprettet tidligere i denne serien, er dette prosjektet overraskende minimal. Faktisk bare inneholder det to kildefiler, main.c og C_Primer.1. Med henblikk på å lære C, er bare main.c av interesse for oss. Filens utvidelse, .c, indikerer at det er en C kildefilen.

Før vi bygge og drive kommandolinjeverktøyet, la oss ta en titt på innholdet i main.c. Bortsett fra et par kommentarer på toppen av filen og en funksjon som heter hoved nederst, ikke kildefilen inneholder ikke mye. Filen inneholder også en inkluderer utsagn som jeg vil snakke om mer litt senere i denne artikkelen.
////Main.c //C Primer ////Laget av Bart Jacobs på 15/02 /14. //Copyright (c) 2014 Tuts +. Alle rettigheter reservert .//# inkluderer < stdio.h > int main (int argc, const char * argv []) {//setter inn koden her ... printf ("Hello, World \\ n"); returnere 0;}

En nærmere titt på den viktigste funksjonen avslører noen interessante karakteristikker av programmeringsspråket C. Jeg nevnte tidligere at C er et maskinskrevet språk, noe som betyr at variablene samt funksjoner er skrevet. Gjennomføringen av de viktigste funksjonen starter ved å angi retur type funksjon, en int. Vær også oppmerksom på at argumentene til funksjonen er skrevet. Nøkkelordet funksjon, som er vanlig i mange andre språk, er fraværende i C.

Liket av den viktigste funksjonen starter med en kommentar (enkel linje kommentarer starter med //). Den andre linjen av funksjonen kropp er en annen funksjon, som er en del av C standard bibliotek, derav #include uttalelse på toppen av filen. Printf funksjonen sender utdata til standard ut, "Hello, World! \\ N", i dette tilfellet. \\ N angir en ny linje. I Xcode, derimot, er utgang omdirigert til Xcode Console, som jeg vil snakke om mer i en bit.

Hovedfunksjonen avsluttes ved å returnere 0. Når et program returnerer 0, betyr det at det avsluttes med suksess . Det er alt som skjer i den viktigste funksjonen. Har ikke noe imot argumentene til den viktigste funksjonen som dette er utenfor omfanget av denne opplæringen.

Bygg og Kjør

Nå som vi vet hva den viktigste funksjonen gjør det, er det på tide å bygge og kjøre kommandolinjeverktøyet. Ved å bygge programmet, er koden i main.c samlet i en binær, som deretter henrettet. Bygge og drive kommandolinjeverktøyet ved å klikke på trekant play-knappen øverst til venstre i vinduet.

Hvis alt gikk bra, bør Xcode vise debug området nederst i vinduet. Du kan vise og skjule debug-området ved å klikke den midterste knappen på Vis-kontroll i verktøylinjen øverst til høyre.

debug-området har to seksjoner. På venstre er Variabler vinduet og på høyre er den konsollen. I konsollen, bør du se ordene Hello, World !. Xcode forteller deg også at programmet ble avsluttet med utgang kode 0, som betyr at programmet sluttet normalt.

I et nøtteskall

I resten av denne artikkelen vil jeg dekke de viktigste egenskapene av C. Hva er dekket i denne opplæringen er begrenset til hva du trenger å vite for å komme i gang med iOS utvikling. I neste artikkel i denne serien vil jeg dekke Objective-C.

I motsetning til tolket språk, som Ruby, PHP og Javascript, C er et kompilert språk. Kildekoden til et program skrevet i et kompilert språk først samlet i en binær som er spesifikk for maskinen den ble utarbeidet på. Den innsamlingsprosessen reduserer kildekoden til instruksjoner som kan forstås av maskinen det kjører på. Dette betyr også at et program utarbeidet på en maskin ikke er garantert å kjøre på en annen maskin.

Det sier seg selv at programmer skrevet i tolket språk må også bli redusert til instruksjonene som målmaskinen kan forstå. Denne prosessen er imidlertid finner sted under kjøring. Resultatet er at, generelt sett, programmer skrevet i et kompilert språk er raskere når henrettet enn de som er skrevet i et tolket språk.

Datatyper

En annen viktig forskjell med språk som PHP, Ruby, og Javascript er at C er et maskinskrevet språk. Hva dette betyr er at datatypen en variabel kan holde behov for å bli eksplisitt spesifisert. I C, de grunnleggende datatyper er tegn (char), heltall (int), og flyttall (float). Fra disse grunnleggende typer, er en rekke andre typer avledet, for eksempel dobbel (dobbel presisjon flyttall), lang (heltallet som kan inneholde større verdier), og usignert (heltall som bare kan inneholde positive verdier og derfor større verdier) . For en fullstendig liste over de grunnleggende C datatyper, anbefaler jeg å ta en titt på Wikipedia-side om C datatyper.

Har du lagt merke til at strengene ikke ble nevnt i listen over grunnleggende C datatyper? En C strengen er lagret som en rekke tegn. En røye kan lagre én ASCII karakter, noe som betyr at en rekke tegn kan lagre en streng. Ta en titt på følgende eksempel for å se hva dette betyr i praksis. De klammer umiddelbart etter variabelnavnet tyder på at vi har å gjøre med en rekke tegn. En C strengen er null avsluttet, noe som betyr at det siste tegnet er 0.
røye fornavn [] = "Bart";

La oss utforske skrive i mer detalj ved å sammenligne to kodesnutter. Den første kodebiten er skrevet i Javascript, mens den andre biten er skrevet i C. I Javascript, er en variabel som regel erklært med VAR-nøkkelordet. C har ikke et nøkkelord for å deklarere variabler. I stedet er en variabel i C erklært av prefixing variabelen med en datatype, for eksempel int eller røye
Var en = 5;. Var b = 13,456; Var c = 'a'; int a = 5; float b = 13,456; char c = 'a';

La oss introdusere noen variabler i den viktigste funksjonen som vi så tidligere. Endre kroppen av hovedfunksjon å ligne kodebiten nedenfor. For å skrive ut variablene ved hjelp av printf-funksjonen, bruker vi formatbransjen. For en mer komplett liste over tilgjengelige format bransjen, gå til denne linken.
Int main (int argc, const char * argv []) {//setter inn koden her ... printf ("Hello, World! \\ N"); //Variabler int a = 5; float b = 6,3; char c = 'r'; printf ("dette er en int:% i \\ n", a); printf ("dette er en float:% f \\ n", b); printf ("dette er en char:% c \\ n", c); returnere 0;}

Som vi så tidligere, i C, skrive er ikke begrenset til variabler. Funksjoner må også angi hvilken type de kommer tilbake, så vel som hvilken type av argumentene de godtar. La oss se hvordan dette fungerer.

Funksjoner

Jeg antar at du allerede er kjent med funksjoner. Som i andre språk, er en C-funksjon en blokk med kode som utfører en bestemt oppgave. La oss gjøre main.c mer interessant ved å innføre en funksjon. Før den viktigste funksjonen, la vi en funksjon prototype. Det forteller kompilatoren om funksjonen, hvilken type det returnerer, og hva argumenter den godtar. På bunnen av main.c, setter vi gjennomføringen av funksjonen. All funksjonen ikke er multiplisere argumentet som sendes til funksjonen ved fem og returnere resultatet
#include <. Stdio.h > int multiplyByFive (int a); //Funksjon Prototypeint main (int argc, const char * argv []) {//setter inn koden her ... printf ("Hello, World \\ n"); //Variabler int a = 5; float b = 6,3; char c = 'r'; printf ("dette er en int >% i \\ n", a); printf ("dette er en dupp >% f \\ n", b); printf ("dette er en char >% c \\ n", c); //Funksjoner printf ("Fem multiplisert med fem er% i \\ n", multiplyByFive (5)); returnere 0;} int multiplyByFive (int a) {return a * 5;}

Vi har også oppdatert den viktigste funksjonen ved å påberope seg multiplyByFive funksjonen. Legg merke til at en funksjon prototype er strengt tatt ikke nødvendig forutsatt at gjennomføringen av funksjonen er plassert før det kalles for første gang. Men ved å bruke funksjonen prototyper er nyttig fordi det tillater utviklerne å spre kildekoden over flere filer og dermed holde et prosjekt organisert.

Hvis en funksjon ikke returnerer en verdi, så returtypen er erklært som ugyldig. I hovedsak betyr dette at ingen verdi returneres av funksjonen. Ta en titt på følgende eksempel. Legg merke til at funksjonen ikke aksepterer noen argumenter. Parentes etter en funksjon navn er nødvendig selv om funksjonen godtar ikke noen argumenter
//Funksjon Prototypevoid Helloworld ();. //Funksjon Implementationvoid Helloworld () {printf ("Hello, World \\ n"); }

Før vi går videre, vil jeg nevne at C-språk ikke har en funksjon søkeord for å erklære en funksjon som i Javascript eller PHP. Parentes etter funksjonsnavnet indikerer at Helloworld er en funksjon. Det samme gjelder for variabler som jeg nevnte tidligere. Med prefikset et variabelnavn med en type, kompilatoren vet at en variabel blir erklært.

Du lurer kanskje på hva fordelene er i en type språk, for eksempel C. For programmerere fra Ruby eller PHP, lære et maskinskrevet språk kan være forvirrende i begynnelsen. Den største fordelen med å skrive er at du blir tvunget til å være eksplisitt om oppførselen til programmet. Fanger feil ved kompilering er en stor fordel som vi vil se senere i denne serien. Selv om C er et maskinskrevet språk, er det ikke et sterkt skrevet språk. De fleste C-kompilatorer gi implisitte konverteringer (for eksempel en char som er konvertert til en int).

konstruksjoner

Hva er en struktur? Tillat meg å sitere Kernighan og Ritchie. En struktur er en samling av en eller flere variabler, eventuelt av forskjellige typer, gruppert sammen under en enkelt navn for praktisk håndtering. La oss se på et eksempel for å se hvordan strukturene fungerer.
//Structuresstruct Album {int år legge inn følgende kode rett før den viktigste funksjonen avkastning uttalelse.; int spor;}; struct Album myAlbum; struct Album yourAlbum; myAlbum.year = 1998; myAlbum.tracks = 20; yourAlbum.year = 2001 og yourAlbum.tracks = 18; printf ("My album ble utgitt i% jeg og hadde% Jeg spor \\ n. ", myAlbum.year, myAlbum.tracks); printf (" Albumet ble utgitt i% jeg og hadde% i spor \\ n ", yourAlbum.year, yourAlbum.tracks);.

Vi starter ved å erklære en ny struktur type og vi gi den et navn på album. Etter å erklære den nye typen, bruker vi det ved å spesifisere at variabelen vi er i ferd med å erklære er en struct og vi spesifisere struct navn, Album. Dot-notasjon brukes til å tilordne verdier til og lese verdier fra variablene struct innehar.

Pekere

Pekere er ofte litt av en snublestein for folk som ønsker å lære C . Definisjonen av en peker er veldig enkel skjønt. En peker er en variabel som inneholder en minneadresse. Husk at en peker er bare en annen C datatype. Pekere blir best forstått med et eksempel. Lim inn følgende kode umiddelbart før retur uttalelse av den viktigste funksjonen
//Pointersint d = 5;. Int * e = & d; printf ("d har en verdi på% i \\ n", d); printf ("e har en verdi på% p \\ n", e); printf ("objektet som e peker på har en verdi på% i \\ n", * e);

Vi starter med å erklære en int og tilordne en verdi til det. I det følgende linje, erklærer vi en peker til int oppkalt e med prefikset variabelnavnet med en stjerne. -Tegnet før variabelen d er en enhetlige operatør (et fancy navn for en operatør som har en operand) som er kjent som adresse-of operatør. Med andre ord, med prefikset den variable d et-tegn, er vår pekeren e gitt ikke verdien av d, men adressen i minnet, hvor verdien av d er lagret. Husk definisjonen av en peker, er det en variabel som inneholder adressen til en variabel.

Blekk uttalelser etter variabeldeklarasjoner vil gjøre dette eksempelet klarere. Bygge og drive eksempel og inspisere produksjon i konsollen. Verdien av d er 5 som vi forventer. Den andre print uttalelse kanskje overraske deg. Pekeren oppkalt e inneholder en minneadresse, stedet i minnet hvor verdien av d er lagret. I den endelige uttalelsen, bruker vi en annen enhetlige operatøren, dereferencing eller indirekte operatør. Hva denne aktøren gjør, er å få tilgang til objektet som er lagret på det stedet markøren peker til. Med andre ord, ved hjelp av dereferencing operatør hente vi verdien av d.

Husk at når en variabel er deklarert i programmeringsspråket C, en blokk med minne er tildelt den variabelen. En peker ganske enkelt peker på at blokk med minne. Med andre ord, holder den en referanse til den variabel som er lagret i minneblokk. Pass på at du forstår begrepet pekere før du går videre til neste artikkel der vi tar en titt på Objective-C. Pekere brukes hele tiden når du arbeider med objekter.

Ikke bekymre deg hvis pekerne ikke umiddelbart gir mening etter å ha lest denne artikkelen. Det tar ofte litt tid å virkelig forstå konseptet. Det er et utmerket innlegg skrevet av Peter Hosey at jeg ikke kan anbefale nok.

Tankene Semicolon

Det virker som om semikolon er ikke lenger hofte. Ruby er ikke glad i semikolon og den nye kule gutten i byen, CoffeeScript, liker ikke dem heller. I C og Objective-C, semikolon er nødvendig ved enden av hver setningen. Kompilatoren er ikke veldig tilgivende som du kanskje har lagt merke til.

Konklusjon

Det er mer til programmeringsspråket C enn hva jeg har dekket i denne artikkelen. I neste artikkel, men jeg vil snakke om Objective-C, og det vil gradvis øke din forståelse av C. Når vi begynner å arbeide med iOS SDK, er jeg sikker på at du får taket på å arbeide med objekter og pekere i ingen tid.



Previous:
Next Page: