2013-07-29 7 views
5

Ho appena cercavo fino funciton attributi per gcc (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html) e mi sono imbattuto l'attributo returns_twice.attributo funzione returns_twice

E io sono assolutamente incompetenti in quale caso una funzione può restituire due volte ... ho guardato rapidamente il citato vfork() e setjmp() ma continuare senza un'idea di come uno scenario del caso assomiglia - qualcuno di voi utilizzato o può spiegare un po?

+4

Cerca 'vfork()' e 'setjmp()' lentamente. – alk

risposta

4

La funzione setjmp è analoga alla creazione di un'etichetta (nel senso goto), come tale è prima di ritorno da setjmp quando si imposta l'etichetta, e quindi ogni volta che effettivamente saltare ad esso.

Se sembra strano, state tranquilli, non dovreste usare setjmp nella vostra programmazione giornaliera. O in realtà ... probabilmente non dovresti usarlo per tutto. È un comando di livello molto basso che interrompe il flusso di esecuzione previsto (molto simile a goto) e, soprattutto in C++, la maggior parte degli invarianti che ci si potrebbe aspettare.

1

Quando si chiama setjmp, lo stabilisce come punto di ritorno, quindi l'esecuzione continua nel codice immediatamente successivo alla chiamata setjmp.

Ad un certo punto più avanti nel codice, chiamando longjmp (con il tampone di salto inizializzato dal precedente chiamata a setjmp) ritorna all'esecuzione iniziare da quello stesso punto (cioè, il codice che segue immediatamente la chiamata setjmp).

Di conseguenza, la chiamata originale viene restituita normalmente, quindi in momenti successivi arbitrari, i ritorni di esecuzione (o almeno possono restituire) allo stesso punto nuovamente.

L'attributo avverte semplicemente il compilatore di questo fatto.

Problemi correlati