C (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Migliorato la pagina |
Annullata la modifica 145187668 di 62.97.36.6 (discussione) Etichetta: Annulla |
||
(20 versioni intermedie di 17 utenti non mostrate) | |||
Riga 5:
|autore = [[Dennis Ritchie]]
|data = 1972
|versione =
|utilizzo = Generico (alta efficienza)
|paradigmi = [[Programmazione imperativa|imperativo]] [[Programmazione procedurale|procedurale]]
Riga 17:
'''C''' ([[Alfabeto fonetico internazionale|AFI]]: {{IPA|/ˈsiː/|en}}{{cn}}) è un [[linguaggio di programmazione]] a uso generale di natura [[Programmazione imperativa|imperativa]] e [[Programmazione procedurale|procedurale]] creato da [[Dennis Ritchie]] negli anni 1970. Tutt'oggi influente, è largamente adoperato nei [[Sistema operativo|sistemi operativi]], nei ''[[driver]]'' e nelle [[Pila di protocolli|pile di protocolli]], mentre è in diminuzione il suo uso nelle [[Applicazione (informatica)|applicazioni]].<ref>{{cita web|data=9 agosto 2016 |titolo=C Language Drops to Lowest Popularity Rating |url=https://www.developer.com/news/c-language-drops-to-lowest-popularity-rating/ |urlmorto= |urlarchivio=https://web.archive.org/web/20220822225609/https://www.developer.com/news/c-language-drops-to-lowest-popularity-rating/|accesso=1º agosto 2022|lingua=en}}</ref> C è comunemente usato in architetture che vanno dai più grandi [[Supercomputer|supercalcolatori]] fino ai minuscoli [[Microcontrollore|microcontrollori]] e [[Sistema embedded|sistemi integrati]].
Successore del linguaggio [[B (linguaggio di programmazione)|B]], C fu in origine sviluppato ai [[Bell Labs]] da Ritchie tra il 1972 e il
C è un linguaggio procedurale imperativo, che supporta la [[programmazione strutturata]], la [[Visibilità (programmazione)|visibilità lessicale]] e la [[ricorsione]], e possiede un [[Sistema dei tipi|sistema di tipi]] statico. Il linguaggio C permette l'utilizzo a basso livello alla [[Memoria (informatica)|memoria]] e fornisce costrutti che combaciano efficientemente con le istruzioni del [[linguaggio macchina]]. Nonostante le sue capacità a basso livello, il linguaggio è adatto per essere programmato su piattaforme diverse: un programma in C conforme scritto per essere portabile può essere compilato per una vasta gamma di piattaforme con poche variazioni al suo codice sorgente.<ref name="cppreference2">{{cita web|url=http://en.cppreference.com/w/c/language/history|titolo=History of C|accesso=28 maggio 2018|urlarchivio=https://web.archive.org/web/20180529130541/http://en.cppreference.com/w/c/language/history|urlmorto=}}</ref>
Riga 45:
* È ammesso dichiarare variabili ovunque si desidera nell'ambito di un blocco di codice così come frapporre tra di esse altre istruzioni;
* Le funzioni della famiglia vscanf;
* Le regole per le [[Costante (informatica)|costanti]] di tipo intero;
* Le regole di promozione degli interi (integer promotion);
* Le macro matematiche di tipo generico in <code><tgmath.h></code>;
Riga 68:
* Bounds-checking interfaces (specificate nella sezione opzionale "Annex K" del C11);
* Analyzability features (specificate nella sezione opzionale "Annex L" del C11);
* La modalità esclusiva
* Le macro per la creazione di numeri complessi in <code><complex.h></code>.
Riga 96:
Esistono inoltre i seguenti modificatori, che si possono anteporre ai nomi dei tipi interi per cambiarne delle caratteristiche: {{Codice|codice=signed|linguaggio=C}} specifica che l'intero può essere positivo o negativo; {{Codice|codice=unsigned|linguaggio=C}} specifica che l'intero può essere solo positivo; {{Codice|codice=short|linguaggio=C}} riduce la memoria assegnata al tipo di dato, restringendo di conseguenza l'intervallo numerico rappresentabile; {{Codice|codice=long|linguaggio=C}} funziona in maniera opposta, aumentando la memoria e ampliando l'intervallo.<ref name="ILC2-2-2"/>
C supporta
I tipi complessi presenti sono gli [[array]], le enumerazioni ({{Codice|codice=enum|linguaggio=C}}), le strutture ({{Codice|codice=struct|linguaggio=C}}) e le unioni ({{Codice|codice=union|linguaggio=C}}). Le [[Stringa (informatica)|stringhe]] sono implementate come semplici array di caratteri terminati da un [[Carattere null|carattere nullo]] ("null character", avente codice ASCII pari a 0) e non hanno un tipo apposito.
Riga 108:
=== Sequenze di escape ===
! Sequenza
! Nome del carattere
Riga 132:
|<code>\"</code> || " (doppi apici)
|-
|<code>\0</code> || [[NULL]] (carattere nullo o di fine stringa)
|}
Riga 139:
{{Vedi anche|Hello world}}
Il seguente esempio stampa il testo
<syntaxhighlight lang="c" line="1">
#include <stdio.h>
Riga 151:
Quanto segue è un'analisi linea per linea del programma mostrato; questo tipo di scrittura è eseguibile soltanto su sistemi basati su Unix.
<syntaxhighlight lang="c" line="1" start="1">#include <stdio.h></syntaxhighlight>
Questa linea è una [[direttiva di inclusione]] per il [[preprocessore]]. Il preprocessore è un programma (o un modulo di un [[Integrated Development Environment|ambiente integrato]]) che esegue alcune trasformazioni preliminari del [[codice sorgente]], prima che quest'ultimo venga consegnato al [[compilatore]] vero e proprio. In questo caso, la trasformazione richiesta consiste nel rimpiazzare la linea in questione con l'intero contenuto dello ''[[header file]]'' ("file di intestazione")
<syntaxhighlight lang="c">
#include "nomeheader.h"
Riga 237:
=== C++ ===
{{vedi anche|C++}}
Il linguaggio di programmazione [[C++]]
[[Bjarne Stroustrup]], il creatore di C++, ha ripetutamente suggerito<ref>{{Cita web |url=http://www.research.att.com/~bs/sibling_rivalry.pdf|titolo=Sibling Rivalry: C and C++}}</ref> che le incompatibilità tra C e C++ dovrebbero essere ridotte il più possibile per massimizzare l'interoperatività tra i due linguaggi. Altri hanno sostenuto che poiché C e C++ sono linguaggi differenti, la compatibilità tra i due è utile ma non vitale. Secondo questa posizione, gli sforzi per ridurre l'incompatibilità non devono ostacolare i tentativi per migliorare in modo autonomo i linguaggi.
Riga 246:
* Singole costanti di caratteri (racchiuse tramite apici singoli) hanno la dimensione di un {{Codice|codice=int|linguaggio=C}} in C e di un {{Codice|codice=char|linguaggio=C++}} in C++.
<!-- Quindi in C <code>sizeof 'a' == sizeof(int)</code> mentre in C++ <code>sizeof 'a' == sizeof(char)</code>.--><!-- Nevertheless, even in C they will never exceed the values that a <code>char</code> can store, so <code>(char)'a'</code> is a safe conversion that will only change the type of the expression (here it is changed from int to char), but not its value (which on systems using ASCII-encoded characters is 97).-->
* Parole chiave addizionali sono introdotte in C++,
* In C++, il compilatore crea automaticamente un ''tag'' per ogni {{Codice|codice=struct|linguaggio=C++}}, {{Codice|codice=union|linguaggio=C++}} o {{Codice|codice=enum|linguaggio=C++}}, quindi {{Codice|codice=struct S {};|linguaggio=C++}} in C++, in C è equivalente a {{Codice|codice=typedef struct S {} S;|linguaggio=C}}.
Riga 253:
Il linguaggio Objective C deve la sua popolarità a [[Apple]] che lo ha scelto come base per i suoi sistemi operativi [[macOS]], [[iOS]], [[watchOS]] e [[tvOS]]. È un linguaggio orientato agli oggetti e, a differenza di [[C++]], mantiene la piena compatibilità con C.
Nel 2014
== Note ==
Riga 308:
{{Linguaggio C}}
{{Principali linguaggi di programmazione}}
{{Android}}
{{Controllo di autorità}}
{{portale|informatica}}
|