Considerare il seguente programma. Questo darà errori di compilazione?Qual è la logica dietro le definizioni provvisorie in C?
#include <stdio.h>
int s=5;
int s;
int main(void)
{
printf("%d",s);
}
A prima vista sembra che il compilatore darà errori ridefinizione variabile, ma il programma è perfettamente valida secondo C standard. (Vedi demo dal vivo qui http://ideone.com/Xyo5SY).
Una definizione provvisoria è qualsiasi dichiarazione di dati esterna che non ha alcun identificatore di classe di memoria e nessun inizializzatore.
C99 6.9.2/2
Una dichiarazione di un fi catore per un oggetto che ha fi portata senza un inizializzatore, e senza una classe di archiviazione specifico er o con il classe di archiviazione specifico er statico, costituisce una definizione provvisoria. Se un'unità di traduzione contiene una o più definizioni provvisorie per un identificatore e l'unità di traduzione non contiene alcuna definizione esterna per che identifica, allora il comportamento è esattamente come se la traduzione unità contenga una dichiarazione di ambito di file di quell'identi fi catore, con tipo composito partire dalla fine della unità di traduzione, un inizializzatore uguale a 0.
mia domanda è, ciò che è razionale per consentire definizioni tentativi? C'è qualche uso di questo in C? Perché C consente definizioni provvisorie?
Non credo che ci sei alcuna motivazione preziosi per che a causa C++ non si è mai avuto, tra i tanti altri linguaggi di programmazione. – edmz