「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 $