10.26 __declspec(noreturn)

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

この属性には、GNU 形式と同等の __attribute((noreturn)) があります。
関数が明示的または暗黙的な戻り値に達した場合、__declspec(noreturn) は無視されて警告が生成されます。
警告:#1461-D: noreturn で宣言された関数に戻り値があります

使用法

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

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

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