10.44 __attribute__((noreturn)) 関数属性

その関数が値を返さないことをコンパイラに通知します。この通知により、コンパイラは実行されないコードを削除することによってコードを最適化できます。

この関数属性は、ARM コンパイラがサポートする GNU コンパイラ拡張機能です。同等の __declspec として __declspec(noreturn) があります。
関数が明示的または暗黙的な戻り値に達した場合、__attribute__((noreturn)) は無視されて警告が生成されます。
警告:#1461-D: noreturn で宣言された関数に戻り値があります

使用法

この属性を使用して、exit() など、戻らない関数を呼び出すコストを削減します。
ベストプラクティスは、常に、戻らない関数を while(1); で終了することです。

void overflow(void) __attribute__((noreturn)); // overflow で呼び出される
        
int negate(int x)
{
    if (x == 0x80000000) overflow();
    return -x;
}

void overflow(void)
{
    __asm {
        SVC 0x123; // 仮想の例外をスローするシステムサービス
    }
    while (1);
}
関連する参考文書
10.26 __declspec(noreturn)
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.