C LANGUAGE TECHNOLOGY

【C言語】_Noreturn関数指示子の使い方と実例

悩んでいる人

C言語で_Noreturn関数指示子の使い方と実例を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

_Noreturn

_Noreturnは,C言語で関数が戻らないことを意味することをコンパイラに伝える関数指示子です.

_Noreturn関数指示子を利用した関数で「return」を利用した場合,コンパイル時にコードの間違いに気づくことが可能になります.

_Noreturn関数指示子は,noreturnとしてstdnoreturn.hでマクロ定義されています.

stdnoreturn.hは/usr/include以下にはなく,/usr/lib/gcc/x86_64-linux-gnu/XX/include/stdnoreturn.hにあります(XXばGCCのバージョン番号).

_Noreturnの使い方

_Noreturnの使い方は以下になります.

コードでは,noreturnを利用しています.

実行結果は以下になります.

noreturn関数指定子がnoreturn_func関数についているため,コンパイル時に警告が発生しています.

実行するとセグメンテーションフォールトが発生しました.

noreturn関数指定子がついている関数には,通常の関数からreturnするための処理(スタックからデータの復元)がないからです.

オプションに-DDISABLE_WARNINGをつけることで,15行目の「return;」ではなく13行目の「exit(0);」を有効にします.

この場合はコンパイル時に警告は発生せず,正常にプログラムが実行できたことがわかります.

参考までに,デバッグ用に警告をエラーにしたい場合は,-Werrorオプションを利用しましょう.

_NoreturnのLinuxカーネルにおける実例

_NoreturnのLinuxカーネルにおける実例を紹介します.

kernel/sched/core.cにあるdo_task_dead関数で_Noreturnを利用しています.

※正確には,do_task_dead関数で利用している__noreturnはGCC/Clangの拡張機能の「__attribute__((__noreturn__))」で,__Noreturnと同等の機能を有しています.

Linuxカーネルを学びたいあなたはこちらからどうぞ.

Linuxカーネル
元東大教員から学ぶLinuxカーネル

こういった私から学べます. Linuxカーネルとは,C言語で開発されたオープンソースのOSです. Linuxカーネルは主に以下のコンピュータで広く利用されています. スーパーコンピュータ サーバ An ...

続きを見る

まとめ

C言語で関数が戻らないことを意味することをコンパイラに伝える関数指示子「_Noreturn」と,その使い方を紹介しました.

また,_NoreturnのLinuxカーネルにおける実例を解説しました.

同じ関数指示子のinlineを知りたいあなたはこちらからどうぞ.

C言語 inline
【C言語】inline関数指示子の使い方と実例

こういった悩みにお答えします. こういった私から学べます. 目次1 inline関数指示子2 inlineの使い方3 inlineのLinuxカーネルにおける実例4 まとめ inline関数指示子 i ...

続きを見る

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , ,