2009-07-22 25 views
18

Quando una funzione C non accetta alcun argomento, deve essere dichiarata/definita con un parametro "void" dalle regole della lingua? PC-Lint sembra avere problemi quando non c'è niente nella lista degli argomenti, e mi chiedevo se si tratta di qualcosa nella sintassi del linguaggio che non conosco.in c: func (void) vs. func()

Modifica: Ho appena trovato una domanda duplicata (back-dupe? È venuto prima), C void arguments, che ha più risposte e spiegazioni.

risposta

33

vuoto indica che la funzione non ha alcun parametro. Ad esempio,

int init (void) 
{ 
    return 1; 
} 

Questa non è la stessa definizione

int init() 
{ 
    return 1; 
} 

perché nel secondo caso il compilatore non verificare se la funzione è davvero chiamato senza argomenti affatto; invece, una chiamata di funzione con numero arbitrario di argomenti sarà accettata senza alcun avviso (ciò è implementato solo per la compatibilità con la sintassi della definizione di funzione vecchio stile, pre-ANSI).

+0

Grazie, il mistero risolto. – noamtm

7

IIRC func (void) in C dichiarerà una funzione che non accetta parametri mentre func() dichiara una funzione che prenderà un numero qualsiasi di parametri. Credo che quest'ultimo sia un artefatto proveniente dal pre-ANSI C.

In base a Wikipedia qui, la dichiarazione func() dichiara sostanzialmente la funzione "senza informazioni sui parametri".

+0

Non è una funzione che accetta un numero qualsiasi di parametri definiti come func (...)? – noamtm

+2

Credi che sia corretto, in K & R C gli elenchi dei parametri sono stati definiti diversi (e scarsamente). Ma in C++ f() è lo stesso di f (void) –

+2

@noamtm - una funzione del modulo func (a, b, ...); dichiara una funzione C che accetta un elenco di argomenti variabili, in modo tale da richiedere anche un numero qualsiasi di parametri. –