リターンしないサブルーチン

サブルーチンがリターンしません。

この診断は、常に例外がスローされるか、あるいはコールスタックの上位のルーチンに制御を移動する longjmp の呼び出しにより、サブルーチンがリターンしないことを示します。exit、abort、FORTRAN STOP などのライブラリー・ルーチンを呼び出すルーチンもリターンしませんが、これらのルーチンに対しては出力されません。また、常に無限ループを実行するルーチンに対しても出力されません。無限ループは、別の診断としてレポートされます。

この方法でサブルーチンを終了しても問題ありませんが、常にこの方法で終了するサブルーチンは通常、コーディングスタイルに問題があります。このようなコーディングスタイルは、ユーザーに誤った印象を与えるため、奨励されません。サブルーチンが呼び出し元にリターンしてから例外をスローするか、longjmp を呼び出す方が分かりやすいことは明らかです。

ID

問題箇所

説明

1

定義

サブルーチンの定義

          
#include <stdio.h>

void never_returns() {
    abort(); // this routine never returns ...
}

int main (int argc, char **argv)
{
    int j;
    j = 1;
    never_returns();
    printf("%d\n",j); // so this is unreachable code
    return 0;
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。