Kenmerken van C-programmering die het uniek (en beter) maakt

Kenmerken van C-programmering die het uniek (en beter) maakt / Programming

De C-programmeertaal is de moeder van alle moderne programmeertalen 10 programmeertalen die u waarschijnlijk nog nooit van 10 programmeertalen hebt gehoord. Waarschijnlijk heeft u er nooit van gehoord Er zijn enkele zeer vreemde en bizarre programmeertalen die de logica op zijn kop hebben gezet en nog steeds zijn gelukt trouw aan de wetenschap van communicatie met een computer. Je gaat ... Lees meer. Bijna elke taal die vandaag wordt gebruikt, bevat verschillende functies die voor het eerst in de taal C zijn verschenen. Het is op grote schaal gebruikt om software te schrijven voor de kleinste embedded microcomputers voor de grootste mainframes en supercomputers..

Toepassingen geschreven in C-reeks in een breed scala van systeemsoftware, desktopsoftware, bedrijfssoftware, databases, enz. Je zou er goed aan doen om een ​​programmeercarrière te beginnen 10 Computerprogrammeringscommando's die nu aan vraag zijn 10 Programmeren van computers Taken die binnen zijn Vraag nu Omdat het landen van een programmeertaak moeilijk kan zijn in het huidige landschap, kunt u overwegen om u te concentreren op een van de volgende concentraties om uw kansen op succes te vergroten. Lees meer met kennis van de basisprincipes van C.

Een korte geschiedenis van C

De ontwikkeling van de C-taal is nauw verbonden met Unix. Het werd rond 1972 ontwikkeld, met meer toevoegingen in latere jaren.

Voordat C werd ontwikkeld, werd het Unix-besturingssysteem voor de PDP-7-computer ontwikkeld met behulp van de assembleertaal. Later werd op dit platform een ​​compiler voor C gebouwd, wederom met behulp van assembleertaal. Op dit moment was C ontworpen om de ontwikkeling van Unix zelf te vergemakkelijken. Met behulp van deze compiler werd Unix volledig herschreven in C voor de PDP-11 computer. En nogmaals, de C-taal-compiler werd herschreven in C (uiteraard geholpen door het uitstekende lex en yacc tools), waarmee het C / Unix Bootstrapping-proces wordt voltooid.

De belangrijkste reden waarom Unix werd herschreven in C was voor draagbaarheid. Sinds assemblagetalen voor verschillende CPU-architecturen Een beknopte handleiding voor de fantastische AMD Threadripper CPU Een beknopte handleiding voor de fantastische AMD Threadripper CPU AMD zat al enkele jaren in de wildernis van de cpu, maar is terug met een enorme knal. De AMD Threadripper is een van de krachtigste consumenten-CPU's op de markt, maar is hij geschikt voor u? Read More zijn anders, het porteren van het Unix OS aan elke zou een aanzienlijke inspanning zijn geweest. Door een systeemtaal zoals C, en het Unix OS in C herschreven, werd deze inspanning met verschillende ordes van grootte verminderd.

Nadat de taal was ontwikkeld, werd erkend dat deze kon worden gebruikt om veel meer te schrijven dan systeemsoftware. En zo begon C te worden gebruikt voor het schrijven van software zoals bestandsservers, databaseservers, netwerkstacks, desktopsoftware en (en later) webservers. Een Android-apparaat in een webserver veranderen Een Android-apparaat in een web veranderen Server Organiseer eenvoudig en goedkoop uw eigen webserver met een Android-smartphone of -tablet. Meer lezen, enz.

In 1978 publiceerden Brian Kernighan en Dennis Ritchie het boek De C programmeertaal. Dit boek diende als een informeel boek C Taalspecificatie voor vele jaren tot 1989 toen C formeel werd gestandaardiseerd door ANSI. De nieuwste versie van C is C11, gepubliceerd in 2011.

Laten we nu kijken naar enkele functies van C die het uniek maken.

C tegen C ++: zijn ze gerelateerd?

Naarmate er meer complexe software werd ontwikkeld in C, werd erkend dat objectgerichte concepten zoals inkapseling, polymorfisme, enz., De complexiteit zouden helpen beheersen. Dit leidde tot de ontwikkeling van C ++ als een superset van C.

C ++ werd gebouwd door het toevoegen van bepaalde functies voor het schrijven van objectgeoriënteerde software, terwijl de compatibiliteit met C werd gehandhaafd. Het werd ontwikkeld met het idee van progressieve verbetering - maken van compatibele wijzigingen in C-taal, zodat C- en C ++ -modules kunnen worden gecombineerd in hetzelfde programma en gecompileerd met dezelfde compiler. Hierdoor konden oudere op C gebaseerde modules worden hergebruikt met minimale wijzigingen in een groter programma dat is geschreven met objectgeoriënteerde concepten.

Een C-programma kan, in theorie, worden gecompileerd door een C ++ -compiler zonder dat er wijzigingen nodig zijn. In de praktijk leidt een strengere typecontrole die door C ++ wordt afgedwongen echter tot fouten, wat enige wijzigingen in de code vereist.

Klein aantal zoekwoorden

De C-taal is ondanks zijn kracht een kleine taal. Dit komt omdat het slechts 32 woorden als trefwoorden met een specifieke betekenis verklaart. Daarentegen verklaart C ++ 82 trefwoorden, heeft java 50 gereserveerde trefwoorden en heeft javascript 63. En COBOL verklaart maar liefst 357 trefwoorden. Stelt u zich de hoofdpijn voor dat u zo'n groot aantal trefwoorden moet onthouden en omzeilen!

Geen expliciete stringtype

In tegenstelling tot de meeste andere moderne talen Om een ​​Android-app te bouwen, moet u deze 7 programmeertalen leren om een ​​Android-app te bouwen, moet u deze 7 programmeertalen leren Welke programmeertaal is geschikt voor het maken van Android-apps? Het komt neer op uw programmeergeschiedenis en welke talen u het prettigst vindt om te gebruiken. Gelukkig heb je opties. Meer lezen, zoals Java, C ++ en JavaScript, C biedt geen afzonderlijk type voor tekenreeksen. Een tekenreeks wordt beschouwd als een reeks tekens afgesloten met een 0 karakter (aangeduid “\ 0”). De lengte van de string wordt aangegeven door een conventie: het aantal tekens tot de 0 karakter. Je bent vrij om het te negeren en te tellen of te bewaren voorbij de “\ 0”. Dit gebrek aan een goed stringtype en de conventie heeft in de loop der jaren talloze bugs opgeleverd, bekend als bufferoverloop.

In feite was de eerste worm die ooit op internet was geraakt, de Morris Internet Worm, het resultaat van een dergelijke bug in een cruciaal stuk systeemsoftware dat bekend staat als de vinger daemon.

Hier is een voorbeeld van zo'n bug. Het illustreert hoe gemakkelijk het is om dergelijke fouten in een programma te introduceren. Het programma compileert goed, maar crasht als gevolg van de bufferoverloop.

# include  main () char * buf = "hello world"; buf [12] = 'a'; printf ("% s \ n", buf);  

In tegenstelling hiermee bieden de meeste moderne talen een expliciet stringtype dat dergelijke shenanigans onmogelijk maakt. Zelfs C ++, dat de boete van bovenstaande code compileert, biedt een expliciete std :: string type.

Aanwijzermanipulatie

Een pointer is een verwijzing naar een geheugenlocatie. C is volledig flexibel als het gaat om het lezen en schrijven van willekeurige geheugenlocaties. Deze flexibiliteit brengt hoge kosten met zich mee en is de oorzaak geweest van veel bugs in het softwarespectrum. Het meest opvallend en van invloed op het hele internet zijn dergelijke bugs in webservers, mailservers en ftp-servers. Zelfs vandaag zijn er af en toe nieuwsverhalen over bugs veroorzaakt door het verwijzen naar en bijwerken van ongeldige geheugenlocaties.

De beruchte SSL HeartBleed beveiligingsbug ontdekt in 2014 was het resultaat van onjuist beheer van pointerlocaties en illustreert het cruciale belang van goed pointerbeheer in C.

Zelfs af en toe een BSOD (“blauwe scherm van dood”) fouten die op Windows-systemen worden gezien, worden waarschijnlijk ook veroorzaakt door onjuiste aanwijzerverwerking.

Andere talen dan C ++ staan ​​geen pointermanipulatie toe en zijn dus niet kwetsbaar voor deze categorie bugs.

Arrays en Pointers zijn onderling uitwisselbaar

In C-array zijn verwijzingen en verwijzingen uitwisselbaar. De taal staat het gebruik van een arrayverwijzing toe Hoe kan ik een Java ArrayList gebruiken Een Java ArrayList gebruiken Een Java-arraylist is een herbruikbare array voor algemeen gebruik. Het biedt de meeste voorzieningen die algemeen worden verwacht van arrays in andere talen. In dit artikel leert u een arraylist in te stellen en te gebruiken. Lees Meer waar een aanwijzer vereist is en vice versa. Hoewel dit krachtige manipulatie mogelijk maakt, heeft het ook geleid tot veel beruchte bugs.

Breed gebruik van “bepalen” macro's

Macro's worden gebruikt om een ​​naam voor een andere uitbreiding te vervangen. Ze kunnen worden gebruikt om de definitie van een naam tijdens het compileren te wijzigen of om een ​​langere uitbreiding voor een eenvoudige naam te vervangen. Het C macro-systeem ondersteunt ifdef conditionals die conditionele compilatie mogelijk maken. Dit is een manier om software te porten naar verschillende architecturen en besturingssystemen. Algemene namen worden gedefinieerd en vervangen tijdens het compileren met verschillende uitbreidingen voor verschillende omstandigheden.

Het is ook mogelijk om hele secties van code op te nemen of te elimineren met behulp van deze macro's Have A Razer Keyboard? Opnemen van macro's is gemakkelijk met synaps Heb je een Razer-toetsenbord? Opnemen van macro's is gemakkelijk met synaps Als u Razer-randapparatuur gebruikt, maar geen gebruik maakt van de Synapse-software, loopt u het risico mis. Hier leest u hoe u macro's effectief kunt gebruiken en hoe ze uw gaming kunnen verbeteren. Lees verder .

Ze zijn verouderd maar beschikbaar in C ++. Andere talen zoals Java, JavaScript, python, enz. Bieden geen vergelijkbare faciliteit.

Modules ingekapseld in bestanden

C heeft niet het concept van een klasse en ondersteunt daarom niet het concept van een afzonderlijke openbare, privé- en beschermde zichtbaarheid. De enige inkapseling die C biedt, is die van bestanden. Functies, globale variabelen en typen gedefinieerd in een bronbestand zijn alleen zichtbaar binnen dat bestand, tenzij de namen worden geëxporteerd. De sleutelwoorden statisch en extern zijn bedoeld voor het controleren van de zichtbaarheid van namen van variabelen en functies.

Andere talen zoals C ++, Java en Python daarentegen ondersteunen over het algemeen klassen en de inkapseling die bij klassen hoort.

Externe bibliotheken

Anders dan basistaalconstructies, wordt complexere functionaliteit in C gedelegeerd aan externe bibliotheken. Stringmanipulatie, wiskunde, input-output, netwerken, enz. Worden allemaal geleverd door externe bibliotheken. Andere talen daarentegen hebben meestal een goed gevulde bibliotheek met modules met de taal zelf.

En dat heeft betrekking op een aantal basiskenmerken van de C-taal, vooral die welke het onderscheidt van andere talen.

Heb je met C gewerkt? Vond je het leuk of had je liever met een andere taal gewerkt? Gelieve uit te leggen in de opmerkingen hieronder.

Ontdek meer over: Programmeren.