Mi aggiungo alle risposte già fornite citando gli attuali standard linguistici.
È "int main;" un programma C valido?
Risposta breve (la mia opinione): solo se la tua implementazione utilizza un "ambiente di esecuzione indipendente".
Tutte le seguenti citazioni da C11
5. Ambiente
Un'implementazione traduce i file sorgente C ed esegue programmi C in due ambienti di sistema di elaborazione dati, che saranno chiamati ambiente di traduzione e ambiente di esecuzione [...]
5.1.2 Ambienti di esecuzione
Sono definiti due ambienti di esecuzione: indipendente e ospitato. In entrambi i casi, l'avvio del programma si verifica quando una funzione C designata viene chiamata dall'ambiente di esecuzione.
5.1.2.1 Ambiente indipendente
In un ambiente indipendente (in cui l'esecuzione del programma C può avvenire senza alcun vantaggio di un sistema operativo), il nome e il tipo della funzione chiamata all'avvio del programma sono definiti dall'implementazione.
5.1.2.2 Ambiente ospitato
Non è necessario fornire un ambiente ospitato, ma deve essere conforme alle seguenti specifiche, se presenti.
5.1.2.2.1 Avvio del programma
La funzione chiamata all'avvio del programma è denominata main . [...] Deve essere definito con un tipo di ritorno int e senza parametri [...] o con due parametri [...] o equivalenti o in qualche altro modo definito dall'implementazione.
Da questi, si osserva quanto segue:
- Un programma C11 può avere un ambiente di esecuzione indipendente o ospitato ed essere valido.
- Se ne ha una indipendente, non è necessario che esista una funzione principale.
- Altrimenti, deve essercene uno con un valore di ritorno di tipo int .
In un ambiente di esecuzione indipendente, direi che si tratta di un programma valido che non consente l'avvio, perché non è presente alcuna funzione come richiesto in 5.1.2. In un ambiente di esecuzione ospitato, mentre il tuo codice introduce un oggetto denominato main , non può fornire un valore di ritorno, quindi direi che non è un programma valido in questo senso, sebbene si potrebbe anche argomentare come prima se il programma non lo è pensato per essere eseguito (su potrebbe voler fornire dati solo per esempio), quindi semplicemente non consente di fare proprio questo.
È "int main;" un programma C ++ valido?
Risposta breve (la mia opinione): solo se la tua implementazione utilizza un "ambiente di esecuzione indipendente".
Citazione da C ++ 14
3.6.1 Funzione principale
Un programma deve contenere una funzione globale chiamata main, che è l'inizio designato del programma. È definito dall'implementazione se un programma in un ambiente indipendente è necessario per definire una funzione principale. [...] Deve avere un tipo di ritorno di tipo int, ma per il resto il suo tipo è definito dall'implementazione. [...] Il nome main non è altrimenti riservato.
Qui, a differenza dello standard C11, si applicano meno restrizioni all'ambiente di esecuzione indipendente, poiché non viene menzionata alcuna funzione di avvio, mentre per un ambiente di esecuzione ospitato, il caso è praticamente lo stesso di C11.
Ancora una volta, direi che per il caso ospitato, il tuo codice non è un programma C ++ 14 valido, ma sono sicuro che sia per il caso indipendente.
Poiché la mia risposta considera solo l' ambiente di esecuzione , penso che entri in gioco la risposta di dasblinkenlicht, poiché la modifica del nome che si verifica nell'ambiente di traduzione avviene in anticipo. Qui, non sono così sicuro che le citazioni sopra siano osservate in modo così rigoroso.
gcc -std=c99 -pedantic ...