Lo standard dice:principale function() con la firma di sbagliato viene chiamato
5.1.2.2.1 all'avvio del programma
La funzione chiamata all'avvio del programma prende il nome principale. L'implementazione non dichiara alcun prototipo per questa funzione. Deve essere definito con un tipo restituito di int e senza parametri: int principale (vuoto) {/ * ... * /} o con due parametri (indicato qui come argc e argv, sebbene qualsiasi nome possa essere utilizzato, poiché sono locali alla funzione in cui sono dichiarati): int main (int argc, char argv []) {/ ... * /} o equivalente; 10) o in qualche altro modo definito dall'implementazione .
Se scrivo questo:
#include <stdio.h>
struct some_struct
{
int i;
};
float main(struct some_struct s)
{
printf("Why does this main get called?\n");
}
In realtà, viene chiamato con qualsiasi prototipo, come la vedo, e non v'è alcun errore qualsiasi runtime.
Perché non è proibito? Non ci sono ragioni per questo? Inoltre, come viene chiamato se la firma è sbagliata?
Ho usato gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Compila con '-Wall -Werror'o' -pedantic-errors' e vedrai che non è permesso. – ouah
Fondamentalmente, se main() non è digitato, il valore predefinito è int, se è stato digitato e non a un int - è un errore. –
Capito dei flag di compilazione, ma come viene chiamato allora? Cerca solo la funzione con il nome "main" e ignora qualsiasi argomento? – acrilige