Egenskaper för C-programmering som gör den unik (och bättre)

Egenskaper för C-programmering som gör den unik (och bättre) / Programmering

C-programmeringsspråket är moderen till alla moderna programmeringsspråk. 10 Programmeringsspråk som du nog aldrig hört av 10 programmeringsspråk som du nog aldrig hört av. Det finns några väldigt märkliga och bisarra programmeringsspråk som har blivit logiska på huvudet och fortfarande lyckats stanna sant mot vetenskapen om kommunikation med en dator. Du kommer att ... Läs mer. Nästan alla språk som används idag innehåller flera funktioner som först uppträdde på C-språket. Det har i stor utsträckning använts för att skriva programvara för de minsta inbyggda mikrodatorer till de största huvudramarna och superdatorerna.

Program som skrivs i C-sortimentet i ett brett spektrum från systemprogramvara, skrivbordsprogramvara, företagsprogramvara, databaser etc. Du skulle göra mycket bra för att starta en programmeringskarriär 10 Datorprogrammeringsjobb som är i efterfrågan just nu 10 Datorprogrammeringsjobb som finns i Efterfrågan just nu Eftersom landning ett programmeringsjobb kan vara svårt i det nuvarande landskapet, bör du överväga att fokusera på en av följande koncentrationer för att förbättra dina chanser att lyckas. Läs mer med kunskap om grunderna i C.

En kort historia av C

Utvecklingen av C-språket är mycket nära associerad med Unix. Det utvecklades 1972, med fler tillägg gjorda under senare år.

Innan C utvecklades utvecklades Unix-operativsystemet för PDP-7-datorn med sitt monteringsspråk. Senare byggdes en kompilator för C på denna plattform, igen med hjälp av monteringsspråk. Vid denna tidpunkt utformades C för att underlätta utvecklingen av Unix själv. Med hjälp av denna kompilator omskrives Unix helt i C för PDP-11-datorn. Och igen, C-språkkompilatorn omskrivits i C (hjälpte förstås av det utmärkta lex och yacc verktyg) och därigenom fullbordar C / Unix Bootstrapping-processen.

Huvudskälet Unix var omskrivet i C var för bärbarhet. Sedan monteringsspråk för olika CPU-arkitekturer En kort guide till den fantastiska AMD Threadripper-CPU En kort guide till den fantastiska AMD Threadripper CPU AMD var i CPU-vildmarken i flera år men är tillbaka med en massiv bang. AMD Threadripper är en av de mest kraftfulla konsumentenheter på marknaden, men är det rätt för dig? Läs mer är olika, portar Unix OS till var och en skulle ha varit en betydande ansträngning. Genom att utveckla en system språk som C, och omskrivning av Unix OS i C reducerades denna ansträngning med flera storleksordningar.

När språket var utvecklat erkändes det att det kunde användas för att skriva mycket mer än systemprogram. Och så började C att användas för att skriva programvara som filservrar, databasservrar, nätverksstackar, skrivbordsprogramvara (och senare) webbservrar Så här byter du en Android-enhet till en webbserver Hur man gör en Android-enhet till en webben Server Host din egen webbserver enkelt och billigt med en Android smartphone eller surfplatta. Läs mer, etc..

1978 publicerade Brian Kernighan och Dennis Ritchie boken C-programmeringsspråket. Den här boken fungerade som en informell C Språkspecifikation i många år fram till 1989 då C formellt standardiserades av ANSI. Den senaste versionen av C är C11, publicerad 2011.

Låt oss nu titta på några funktioner i C som gör den unik.

C vs C ++: Är de relaterade?

När mer komplex mjukvara utvecklades i C, inserdes det att objektorienterade begrepp inklusive inkapsling, polymorfism etc skulle hjälpa till att hantera komplexiteten. Detta leder till utvecklingen av C ++ som en superset av C.

C ++ byggdes genom att lägga till vissa funktioner för att skriva objektorienterad programvara, samtidigt som den upprätthåller kompatibilitet med C. Den utvecklades med idén om progressiv förbättring - gör kompatibla ändringar av C-språk så att C och C ++-moduler kan kombineras i samma program och sammanställas med samma kompilator. Detta gjorde det möjligt för äldre C-baserade moduler att återanvändas med minimala förändringar i ett större program skrivet med objektorienterade koncept.

Ett C-program kan i teorin sammanställas av en C ++-kompilator utan att behöva ändras. I praktiken resulterar emellertid strängare typkontroll som verkställs av C ++ fel, vilket kräver några ändringar av koden.

Litet antal sökord

C-språket har varit ett litet språk trots sin makt. Detta beror på att det endast förklarar 32 ord som nyckelord med en viss betydelse. Däremot förklarar C ++ 82 nyckelord, java har 50 reserverade nyckelord och javascript har 63. Och COBOL förklarar en hel del 357 nyckelord. Föreställ dig huvudvärk att behöva komma ihåg och sidesteg ett så stort antal sökord!

Ingen exakt strängtyp

Till skillnad från de flesta andra moderna språk Att bygga en Android App behöver du lära dig dessa 7 programmeringsspråk Att bygga en Android App behöver du lära dig dessa 7 programmeringsspråk Vilket programmeringsspråk är rätt för att skapa Android-appar? Det kommer ner till din programmeringshistorik och vilka språk du tycker är mest bekväm att använda. Lyckligtvis har du alternativ. Läs mer som Java, C ++ och JavaScript, C ger inte en separat typ för strängar. En sträng anses vara en uppsättning tecken som avslutas av a 0 tecken (betecknad “\ 0”). Strängens längd betecknas av en konvention: antalet tecken fram till 0 tecken. Du är fri att ignorera den och räkna eller lagra dig förbi “\ 0”. Denna brist på en ordentlig strängtyp och konventionen har resulterat i otaliga buggar genom åren, känd som buffer-överflöde.

Faktum är att den första masken som någonsin slog på internet, Morris Internet Worm, var resultatet av en sådan bugg i en avgörande del av systemprogramvaran känd som fingerdemon.

Här är ett exempel på en sådan bugg. Det illustrerar hur enkelt det är att införa sådana buggar i ett program. Programmet sammanställer bra, men kraschar på grund av buffertöverflödet.

# inkluderar  main () char * buf = "hej värld"; buf [12] = 'a'; printf ("% s \ n", buf);  

Däremot ger de flesta moderna språken en explicit strängtyp som gör sådana omständigheter omöjliga. Även C ++, som sammanställer ovanstående kodböter, ger en explicit std :: string typ.

Pointer Manipulation

En pekare är en referens till en minnesplats. C är helt flexibel när det gäller läsning och skrivning av godtyckliga minnesplatser. Denna flexibilitet kommer till en bra kostnad och har orsakat många buggar över programvarans spektrum. Mest anmärkningsvärda och påverkar hela internetet inkluderar sådana fel i webbservrar, postservrar och ftp-servrar. Även idag finns det ibland nyheter om buggar som orsakas av referens och uppdatering av ogiltiga minnesplatser.

Den ökända SSL HeartBleed säkerhetsbuggen upptäckt 2014 var resultatet av felaktig hantering av pekarlägen och illustrerar den avgörande betydelsen av korrekt pekarhantering i C.

Även ibland BSOD (“blåskärm”) Fel som ses på Windows-system orsakas också troligen av felaktig pekarhantering.

Andra språk än C ++ tillåter inte pekarmanipulation och är därför inte sårbara för denna klass av buggar.

Arrayer och pekare är utbytbara

I C-serien är referenser och pekare utbytbara. Språket tillåter användning av en array-referens Så här använder du en Java ArrayList Så här använder du en Java ArrayList En Java arraylist är en universalformat som kan ändras. Det ger de flesta av de faciliteter som vanligtvis förväntas av arrays på andra språk. I den här artikeln lär du dig att skapa och använda en arraylist. Läs mer där en pekare krävs och vice versa. Även om detta tillåter kraftfull manipulation, har det också resulterat i många ökända buggar.

Bred användning av “definiera” Makron

Makroer används för att ersätta ett namn för en annan expansion. De kan användas för att ändra definitionen av ett namn vid kompileringstid, eller att ersätta en längre expansion för ett enkelt namn. C-makrosystemet stöder ifdef villkor som tillåter villkorlig sammanställning. Detta är ett sätt att mjukvaran är portad till olika arkitekturer och operativsystem. Generiska namn definieras och ersätts vid sammanställningstid med olika expansioner för olika förhållanden.

Det är också möjligt att inkludera eller eliminera hela sektioner av kod från att sammanställas med hjälp av dessa makroner. Har ett Razer-tangentbord? Inspelning makron är lätt med synapse Har ett Razer tangentbord? Inspelning av makron är lätt med synapse Om du använder Razer-kringutrustning men inte utnyttjar Synapse-programvaran, saknar du det. Så här använder du makron på ett effektivt sätt och hur de kan överbelasta ditt spel. Läs mer .

De är deprecerade men tillgängliga i C ++. Andra språk som Java, JavaScript, Python, etc ger inte en liknande möjlighet.

Moduler inkapslade i filer

C har inte begreppet en klass och stöder därför inte begreppet separat, privat och skyddad synlighet. Den enda inkapslingen som tillhandahålls av C är den för filer. Funktioner, globala variabler och typer definierade i en källfil är endast synliga i den filen om inte namnen exporteras. Nyckelorden statisk och extern tillhandahålls för att styra synligheten av variabel- och funktionsnamn.

Däremot stöder andra språk som C ++, Java och Python klasser och inkapslingen som går med klasserna.

Externa bibliotek

Annat än grundläggande språkkonstruktioner, mer komplicerad funktionalitet i C delegeras till externa bibliotek. Stringmanipulation, matematik, input-output, nätverk etc. tillhandahålls alla av externa bibliotek. Däremot kommer andra språk oftast med ett välfyllt bibliotek med moduler med själva språket.

Och det täcker några grundläggande egenskaper hos C-språket, särskilt de som skiljer det från andra språk.

Har du arbetat med C? Gillade du det eller skulle du ha föredragit att arbeta med något annat språk? Vänligen förklara i kommentarerna nedan.

Utforska mer om: Programmering.