「Noreturn」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「_Noreturn(_Noreturn関数指示子) とは、「関数が戻らない」ことを意味することをコンパイラに伝える指示子で、ソースコードの...」)
 
(相違点なし)

2014年3月30日 (日) 21:54時点における最新版

_Noreturn(_Noreturn関数指示子) とは、「関数が戻らない」ことを意味することをコンパイラに伝える指示子で、ソースコードの間違いをプログラマに気づかせる利点があります。

読み方

_Noreturn
あんすこ のー りたーん
_Noreturn関数指示子
あんすこ のー りたーん かんすう しじし

概要

関数内でreturnをしているところがあるとコンパイルエラーになります。

_Noreturn
void
none_exit_with_return(int status)
{
        if (status) {
                return;
        }
        exit(EXIT_SUCCESS);
}

上記のように途中にreturnがあると、下記の警告が発生します。

$ cc noreturn.c
noreturn.c:30:3: warning: function 'none_exit_with_return' declared 'noreturn'
      should not return [-Winvalid-noreturn]
                return;
                ^
1 warning generated.

ソースコード

/*
 * noreturn.c
 * Copyright (C) 2014 kaoru <kaoru@bsd>
 */
#include <stdlib.h>
_Noreturn
void
my_exit(void)
{
        exit(EXIT_SUCCESS);
        // NOTREACHED
}
#ifdef EBUG
_Noreturn
void
none_exit(void)
{
        // this is error
}
#endif
int
main(int argc, char *argv[])
{
        my_exit();
        exit(EXIT_SUCCESS);
}

コンパイル

$ cc noreturn.c

実行例

$ ./a.out
$

関連項目