C è un linguaggio di programmazione procedurale di uso generale che ha avuto un'influenza significativa nello sviluppo di molti linguaggi di programmazione moderni. Progettato per essere efficiente e flessibile, è comunemente utilizzato per la programmazione di sistema, lo sviluppo di sistemi operativi e la creazione di software applicativo. C fornisce accesso a basso livello alla memoria e consente la manipolazione dei bit, rendendolo una scelta preferita per scrivere software critico per le prestazioni.
C è stato sviluppato all'inizio degli anni '70 da Dennis Ritchie presso i Bell Labs come evoluzione del linguaggio B, che era influenzato da BCPL e ALGOL. Inizialmente, era destinato alla programmazione di sistema sul sistema operativo Unix, che ha avuto origine anch'esso presso i Bell Labs. Il design del linguaggio si è concentrato sul fornire un'astrazione di alto livello rispetto al linguaggio assembly, mantenendo l'efficienza della programmazione a basso livello.
Entro la fine degli anni '70, C ha guadagnato una diffusione ampia nella comunità di programmazione, e la pubblicazione di "The C Programming Language" da parte di Brian Kernighan e Dennis Ritchie nel 1978 ha contribuito significativamente alla sua popolarità. La prima versione standardizzata, chiamata C89 o ANSI C, è stata adottata dall'American National Standards Institute (ANSI) nel 1989. L'Organizzazione Internazionale per la Standardizzazione (ISO) l'ha successivamente adottata, portando a ISO C99 nel 1999, che ha introdotto diverse nuove funzionalità come le funzioni inline e gli array di lunghezza variabile. L'ultimo standard principale, C11, è stato pubblicato nel 2011, e C18, una release di correzione di bug, è seguita nel 2018.
C rimane uno dei linguaggi di programmazione più utilizzati al mondo, specialmente nella programmazione di sistemi, nei sistemi embedded e nelle applicazioni ad alte prestazioni. La sua sintassi e i suoi concetti hanno influenzato molti altri linguaggi, tra cui C++, C#, Java e Objective-C. La sua continua rilevanza può essere vista nei sistemi operativi (Linux, Windows), nella programmazione di rete, nei sistemi embedded e in vari compiti di calcolo ad alte prestazioni.
C consente la manipolazione diretta della memoria tramite puntatori. Ad esempio:
int x = 10;
int *p = &x; // Il puntatore p contiene l'indirizzo di x
C supporta la programmazione strutturata tramite funzioni, consentendo la modularità del codice. Una semplice definizione di funzione appare così:
void greet() {
printf("Ciao, Mondo!\n");
}
C include varie strutture di controllo del flusso come if, switch, for, while e do-while, che facilitano il processo decisionale.
if (x > 0) {
printf("Numero positivo\n");
}
C ha diversi tipi di dati incorporati: int, char, float, double, ecc. Supporta anche tipi di dati definiti dall'utente tramite strutture.
struct Point {
int x;
int y;
};
C include un ricco insieme di librerie per operazioni di input/output, manipolazione di stringhe e calcoli matematici.
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C consente il casting di tipo esplicito, utile per la conversione tra tipi.
double pi = 3.14;
int intPi = (int)pi; // intPi sarà 3
C supporta i tipi enumerati per creare tipi personalizzati.
enum Color { RED, GREEN, BLUE };
C include direttive del preprocessore come #define, #include, che gestiscono il codice prima della compilazione.
#define PI 3.14
C consente le dichiarazioni di variabili all'interno di uno specifico ambito, migliorando l'incapsulamento.
{
int temp = 5; // temp è valido solo all'interno di questo blocco
}
C non supporta l'overloading delle funzioni come C++, ma consente argomenti predefiniti tramite implementazione manuale.
int add(int a, int b) {
return a + b;
}
C richiede un compilatore per trasformare il codice sorgente in codice macchina. I compilatori più popolari includono GCC (GNU Compiler Collection), Clang e MSVC (Microsoft Visual C++).
Per compilare un programma C, puoi tipicamente utilizzare un comando come:
gcc -o myprogram myprogram.c
Questo compila myprogram.c
in un eseguibile chiamato myprogram
.
Diversi IDE supportano la programmazione in C, come:
Questi IDE forniscono funzionalità come evidenziazione della sintassi, strumenti di debug e gestione dei progetti.
C è ampiamente utilizzato in vari settori, tra cui:
C è spesso confrontato con diversi altri linguaggi di programmazione, poiché condivide somiglianze e funge da base per molti:
C può essere tradotto in linguaggi che supportano costrutti di programmazione procedurale e ottimizzazioni a basso livello con facilità. Quando si traduce codice C in un linguaggio di livello superiore, gli sviluppatori dovrebbero prestare attenzione alle differenze nella gestione della memoria, poiché i linguaggi di livello superiore presentano spesso garbage collection.
Diversi strumenti di traduzione da codice a codice possono aiutare a convertire codice C in altri linguaggi, tra cui: