2013-08-04 27 views
5

Desidero scrivere un prototipo di funzione per una funzione, il cui argomento è un puntatore a una struttura.C Prototipo di funzione con argomento Struct

int mult(struct Numbers *n) 

Tuttavia, i numeri struct, che è definita come

struct Numbers { 
    int a; 
    int b; 
    int c; 
}; 

non è ancora definita. Come dovrei scrivere un prototipo adatto per mult?

+1

Avrete bisogno di una dichiarazione in avanti. Le dichiarazioni in avanti di –

+0

funzionano solo con i puntatori, quindi se si desidera passare effettivamente una struttura in base al valore, è necessario definire in modo completo la struttura prima di utilizzarla. Questo perché il sistema sa quanto è grande un puntatore, ma non sa quanto sia grande una struttura indefinita. – xaxxon

risposta

5

Proprio dichiarano struct Numbers come un tipo incompleto prima della dichiarazione di funzione:

struct Numbers; 

int mult(struct Numbers *n); 
4

Devi inoltrare la dichiarazione della struttura per dire al compilatore che una struct con quel nome verrà definito:

struct Numbers; 

int mult(struct Numbers *n) { 

} 

struct Numbers { 
    int a; 
    int b; 
    int c; 
}; 

Ricorda che il compilatore non è in grado di determinare la dimensione in memoria della struttura in modo da non poterla passare per valore.

+0

puoi mai passare una struttura in base al valore in C? – Dave

+1

@Dave assolutamente. Normalmente non è una buona idea, e devi avere la struttura completamente definita prima di usarla come parametro, ma non c'è nulla che ti blocchi se lo vuoi davvero. – xaxxon

+0

Huh, non l'ho mai saputo. Pensavo che il passaggio per valore fosse C++, non C. Ma sì, sono d'accordo che il 99% delle volte sarebbe una pessima idea. – Dave