2014-09-06 18 views

risposta

16

è possibile farlo utilizzando un letterale composto:

Result test(void) 
{ 
    return (Result) {.low = 0, .high = 100, .sum = 150}; 
} 

(){} è l'operatore letterale composto e composto letterale è una funzionalità introdotta in C99.

+0

Questo metodo comporta ram ripartendo, dal compilatore, per tenere un 'Risultato' struct, dove i campi sono inizialmente copiati, poi copiato nuovamente a istanza della 'struct Risultato' i chiamanti. Queste due copie e l'allocazione della struttura dei risultati sono vere e proprie perdite di ciclo RAM e CPU. – user3629249

+1

@ user3629249: Ma questi possono essere ottimizzati e sono specifici dell'ABI. Su Linux/x86-64 una 'struct' a due campi viene spesso restituita in due registri. –

-5
struct Result 
{ 
    int low; 
    int high; 
    int sum; 
}; 

then to create an instance of the struct 

struct Result myResult; 

Regarding your question... 

prototype for the test function 

void test(struct Result *myResult); 

invoke the function by: 

test(&myResult); 

the test function: 

void test(struct Result *argResult) 
{ 
    argResult->low = 0; 
    argResult->high = 100; 
    argResult->sum = 150; 
} 
+3

Le strutture Typedef'ing sono ammortizzate ??? Inoltre, 'test (struct Result & myResult)' - da quando questo è diventato un modo per "invocare una funzione" in linguaggio C? – AnT

+0

A destra, cambierò la linea per invocare la funzione – user3629249

+0

Non sono riuscito a trovare il riferimento originale al typedef della struct che è stato ammortizzato, quindi ho rimosso quell'istruzione – user3629249

Problemi correlati