Caratteristiche della programmazione in C che la rendono unica (e migliore)
Il linguaggio di programmazione C è la madre di tutti i linguaggi di programmazione moderni 10 Linguaggi di programmazione Probabilmente non avete mai sentito parlare di 10 linguaggi di programmazione Probabilmente non avete mai sentito parlare Ci sono alcuni linguaggi di programmazione molto strani e bizzarri che hanno trasformato la logica in testa e sono ancora riusciti a rimanere fedele alla scienza della comunicazione con un computer. Stai per ... Leggi altro. Quasi tutte le lingue in uso oggi includono diverse funzionalità che sono apparse per la prima volta nel linguaggio C. È stato ampiamente utilizzato per scrivere software per i più piccoli microcomputer incorporati ai più grandi mainframe e supercomputer.
Le applicazioni scritte in C variano in un'ampia varietà di software di sistema, software desktop, software aziendale, database, ecc. Faresti una buona carriera di programmazione 10 Lavori di programmazione informatica che sono richiesti in questo momento 10 Lavori di programmazione del computer che si trovano in Domanda in questo momento Dal momento che l'atterraggio di un lavoro di programmazione può essere difficile nel panorama attuale, è consigliabile concentrarsi su una delle seguenti concentrazioni per migliorare le possibilità di successo. Leggi di più con una conoscenza delle basi di C.
Una breve storia di C
Lo sviluppo del linguaggio C è strettamente associato a Unix. È stato sviluppato intorno al 1972, con ulteriori aggiunte fatte negli anni successivi.
Prima che fosse sviluppato C, il sistema operativo Unix è stato sviluppato per il computer PDP-7 usando il suo linguaggio assembly. Più tardi un compilatore per C è stato creato su questa piattaforma, usando ancora il linguaggio assembly. In questo momento, C è stato progettato per facilitare lo sviluppo di Unix stesso. Usando questo compilatore, Unix è stato riscritto completamente in C per il computer PDP-11. E ancora, il compilatore del linguaggio C è stato riscritto in C (aiutato, ovviamente, dall'eccellente Lex e yacc strumenti), completando così il processo di bootstrap C / Unix.
Il motivo principale per cui Unix è stato riscritto in C era per la portabilità. Dal momento che i linguaggi di assemblaggio per le diverse architetture della CPU Una breve guida alla fantastica CPU AMD Threadripper Una breve guida alla fantastica AMD Threadripper CPU AMD era nel deserto delle CPU per diversi anni, ma è tornata con un enorme botto. AMD Threadripper è una delle CPU consumer più potenti sul mercato, ma è giusto per te? Leggi di più sono diversi, il porting del sistema operativo Unix a ciascuno sarebbe stato uno sforzo significativo. Sviluppando a linguaggio dei sistemi come C, e riscrivendo il sistema operativo Unix in C, questo sforzo è stato ridotto di diversi ordini di grandezza.
Una volta sviluppato il linguaggio, è stato riconosciuto che potrebbe essere utilizzato per scrivere molto più del software di sistema. E così, C ha iniziato a essere utilizzato per scrivere software come file server, server di database, stack di rete, software desktop e (e successivi) server Web Come trasformare un dispositivo Android in un server Web Come trasformare un dispositivo Android in un Web Server Ospita il tuo server web in modo semplice ed economico con uno smartphone o tablet Android. Leggi di più, ecc.
Nel 1978, Brian Kernighan e Dennis Ritchie hanno pubblicato il libro Il linguaggio di programmazione C. Questo libro è stato un informale C Language Specification per molti anni fino al 1989 quando C fu formalmente standardizzata da ANSI. L'ultima versione di C è C11, pubblicata nel 2011.
Vediamo ora alcune caratteristiche di C che lo rendono unico.
C vs C ++: sono correlati?
Con la creazione di un software più complesso in C, è stato riconosciuto che i concetti orientati agli oggetti, inclusi l'incapsulamento, il polimorfismo, ecc., Aiuterebbero a gestire la complessità. Ciò ha portato allo sviluppo di C ++ come superset di C.
Il C ++ è stato creato aggiungendo alcune funzionalità per la scrittura di software orientato agli oggetti, pur mantenendo la compatibilità con C. È stato sviluppato con l'idea di miglioramento progressivo - apportare modifiche compatibili al linguaggio C in modo che i moduli C e C ++ possano essere combinati nello stesso programma e compilati con lo stesso compilatore. Ciò ha permesso di riutilizzare i vecchi moduli basati su C con modifiche minime in un programma più ampio scritto usando concetti orientati agli oggetti.
Un programma C può, in teoria, essere compilato da un compilatore C ++ senza richiedere modifiche. In pratica, tuttavia, il controllo del tipo più rigoroso applicato da C ++ genera errori, richiedendo alcune modifiche al codice.
Piccolo numero di parole chiave
Il linguaggio C è stato un linguaggio piccolo nonostante il suo potere. Questo perché dichiara solo 32 parole come parole chiave con un significato specifico. Al contrario, C ++ dichiara 82 parole chiave, java ha 50 parole chiave riservate e javascript ne ha 63. E COBOL dichiara ben 357 parole chiave. Immagina il mal di testa di dover ricordare e sottrarre un numero così elevato di parole chiave!
Nessun tipo di stringa esplicita
A differenza della maggior parte degli altri linguaggi moderni Per creare un'app per Android, è necessario conoscere questi 7 linguaggi di programmazione Per creare un'app per Android, è necessario conoscere questi 7 linguaggi di programmazione Qual è il linguaggio di programmazione adatto alla creazione di app per Android? Dipende dalla tua cronologia di programmazione e dalle lingue che ritieni più a tuo agio nell'uso. Fortunatamente, hai delle opzioni. Ulteriori informazioni come Java, C ++ e JavaScript, C non fornisce un tipo separato per le stringhe. Una stringa è considerata una matrice di caratteri terminata da a 0 caratteri (denotata “\ 0”). La lunghezza della stringa è denotata da una convenzione: il numero di caratteri fino al 0 caratteri. Sei libero di ignorarlo e conta o memorizza il passato “\ 0”. Questa mancanza di un corretto tipo di stringa e della convenzione ha portato a innumerevoli bug nel corso degli anni, noti come buffer overflow.
In effetti, il primo worm che abbia mai colpito Internet, il Morris Internet Worm, era il risultato di un tale errore in un pezzo cruciale del software di sistema noto come daemon dito.
Ecco un esempio di un tale bug. Illustra quanto sia facile introdurre tali bug in un programma. Il programma si compila bene, ma si blocca a causa dell'overflow del buffer.
# includere main () char * buf = "Ciao mondo"; buf [12] = 'a'; printf ("% s \ n", buf);
Al contrario, la maggior parte dei linguaggi moderni fornisce un tipo di stringa esplicito che rende impossibile questo tipo di shenanigans. Anche C ++, che compila il codice sopra, fornisce un esplicito std :: string genere.
Manipolazione del puntatore
Un puntatore è un riferimento a una posizione di memoria. C è completamente flessibile quando si tratta di leggere e scrivere posizioni di memoria arbitrarie. Questa flessibilità ha un costo enorme ed è stata la causa di molti bug nell'intero spettro del software. I più importanti e che interessano l'intera rete includono tali bug nei server Web, nei server di posta e nei server ftp. Ancora oggi, ci sono occasionalmente notizie su bug causati dal riferimento e l'aggiornamento di posizioni di memoria non valide.
Il famigerato SSL HeartBleed Il bug di sicurezza scoperto nel 2014 era il risultato di una gestione impropria delle posizioni dei puntatori e illustra l'importanza cruciale della corretta gestione dei puntatori in C.
Anche l'occasionale BSOD (“schermo blu della morte”gli errori che si vedono sui sistemi Windows sono probabilmente causati da una gestione errata del puntatore.
Le lingue diverse da C ++ non consentono la manipolazione del puntatore e quindi non sono vulnerabili a questa classe di bug.
Array e puntatori sono intercambiabili
Nei riferimenti dell'array C e i puntatori sono intercambiabili. Il linguaggio consente l'utilizzo di un riferimento di array Come utilizzare un ArrayList Java Come utilizzare un ArrayList Java Un array di dati Java è un array di ridimensionamento generico. Fornisce la maggior parte delle strutture generalmente previste per gli array in altre lingue. In questo articolo imparerai a configurare e utilizzare un arraylist. Leggi di più dove è richiesto un puntatore e viceversa. Mentre ciò consente una potente manipolazione, ha anche provocato molti bug infami.
Ampio uso di “definire” Macro
Le macro sono utilizzate per sostituire un nome per un'espansione diversa. Possono essere usati per cambiare la definizione di un nome in fase di compilazione o per sostituire un'espansione più lunga per un nome semplice. Il sistema macro C supporta ifdef condizionali che consentono la compilazione condizionale. Questo è un modo in cui il software viene trasferito a diverse architetture e sistemi operativi. I nomi generici sono definiti e sostituiti in fase di compilazione con espansioni diverse per condizioni diverse.
È anche possibile includere o eliminare intere sezioni di codice dalla compilazione utilizzando queste macro Hai una tastiera Razer? La registrazione dei macro è facile con Synapse Avere una tastiera Razer? La registrazione dei macro è facile con Synapse Se usi le periferiche Razer ma non sfrutti il software Synapse, ti stai perdendo. Ecco come utilizzare le macro in modo efficace e come possono potenziare i tuoi giochi. Leggi di più .
Sono deprecati ma disponibili in C ++. Altri linguaggi come Java, JavaScript, Python, ecc. Non forniscono una funzione simile.
Moduli incapsulati in file
C non ha il concetto di classe, e quindi non supporta la nozione di visibilità separata pubblica, privata e protetta. L'unica incapsulazione fornita da C è quella dei file. Funzioni, variabili globali e tipi definiti all'interno di un file sorgente sono visibili solo all'interno di quel file, a meno che i nomi non vengano esportati. Le parole chiave statico e extern sono forniti allo scopo di controllare la visibilità dei nomi di variabili e funzioni.
Al contrario, altri linguaggi come C ++, Java e Python generalmente supportano le classi e l'incapsulamento che accompagna le classi.
Librerie esterne
Oltre ai costrutti del linguaggio di base, la funzionalità più complessa in C è delegata a librerie esterne. Manipolazione delle stringhe, matematica, input-output, networking, ecc. Sono tutti forniti da librerie esterne. Al contrario, altre lingue di solito vengono con una libreria di moduli ben fornita con il linguaggio stesso.
E questo copre alcune caratteristiche di base del linguaggio C, specialmente quelle che lo distinguono dalle altre lingue.
Hai lavorato con C? Ti è piaciuto o avresti preferito lavorare con qualche altra lingua? Si prega di spiegare nei commenti qui sotto.
Scopri di più su: Programmazione.