2013-07-29 5 views
5

gcc (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html) のfunciton属性を探していて、returns_twice属性が見つかりました。ファンクション属性returns_twice

私は、関数が2回返すことができる場合は絶対に無駄です...私は上記のvfork()setjmp()をすばやく検索しましたが、使用可能なシナリオがどのように見えるかはわかりません。ビット?

+4

'vfork()'と 'setjmp()'をゆっくり探します。 – alk

答えて

4

setjmp機能は、次のようなあなたが最初のラベルを設定するときsetjmpから復帰した後、あなたが実際にそれにジャンプするたびになり、(goto意味で)ラベルの作成に似ています。

あなたが毎日のプログラミングでsetjmpを使用するべきではありません。または実際には... にすべてを使用しないでください。これは期待される実行フロー(多くの場合、gotoのような)を破る非常に低レベルのコマンドであり、特にC++では、あなたが期待できる不変量の大部分です。

1

setjmpを呼び出すと、リターンポイントとして、setjmpコールの直後のコードで実行が継続されます。 (setjmpの以前の呼び出しによって初期化ジャンプ緩衝液)longjmpを呼び出し後のコードの中でいくつかの点で

は、(すなわち、コードが直ちにコールsetjmp後)再びその同じ点から開始する実行を返します。

したがって、元の呼び出しは正常に戻り、任意の後の時刻に実行が戻ります(または少なくともに戻ります)。

属性は、単にその事実をコンパイラに警告します。