C LANGUAGE TECHNOLOGY

【C言語】総称選択_Genericの使い方

悩んでいる人

C言語で総称選択_Genericの使い方を教えて!

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

本記事の信頼性

  • リアルタイムシステムの研究歴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にオープンソースとして公開

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

総称選択_Generic

_Genericは,C言語のC11規格から採用された総称選択(Generic Selection)のキーワードです.

※総称選択を汎用選択と呼ぶ場合もあります.

_Genericを利用するとコンパイル時に引数の型に基づいて式を選択するコードを記述します.

総称選択は,呼び出される関数が引数の型により選択される「C++言語の関数のオーバーロード」に似ています.

この性質により,_Genericはマクロで利用されることが多いです.

_Genericの構文と制約

_Genericの構文は以下になります.

正直よくわからないと思いますので,コードを読みながら理解を深めた方が良いです.

_Genericの制約は以下になります.

細かい仕様なので,難しければ読み飛ばしても構いません.

  • generic-selectionは,1つ以上のdefault generic-associationを有してはならない.
  • generic-associationのtype-nameは,可変長引数以外の完全なオブジェクト型を指定しなければならない.
  • 同じgeneric-selectionにあるgeneric-associationには,互換性のあるtype-nameを2つ以上指定してはならない.
  • type-nameは,左辺値変換,配列からポインタへの変換,または関数からポインタへの変換を行った場合の式の型とする.
  • generic-assoc-listの多くとも1つのtype-nameと互換性がなければならない.
  • generic-selectionがdefault generic-associationをもたない場合,その制御式は,そのgeneric-assoc-listでtype-nameのうちのちょうど1つと互換性がなければならない.

また,引数の個数が明示的に異なる場合は利用できません.

C++言語の関数のオーバーロードとの大きな違いです.

※可変長引数を利用すれば,引数の個数を可変にすることは制限付きで可能になります.

引数が1つの場合の_Genericの使い方

引数が1つの場合の_Genericの使い方は以下になります.

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

引数が2つの場合の_Genericの使い方

引数が2つの場合の_Genericの使い方は以下になります.

_Genericの中に_Genericを入れ子していることがわかります.

引数が1つの場合と比較すると書き方が難しいですね...

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

まとめ

C言語で総称選択_Genericの使い方を紹介しました.

具体的には,引数が1つの場合と2つの場合のコードを解説しました.

ゼロからスクラッチで_Genericを利用するコードを作るのは大変ですので,是非利用して下さい!

_Genericの他の使い方は以下の記事で紹介していますので,あわせて読みましょう!

C言語 swap
【C言語】swap関数とswapマクロで値を交換

こういった悩みにお答えします. こういった私から学べます. 目次1 swap2 swap関数2.1 int型のswap関数2.2 double型のswap関数3 swapマクロ3.1 データ型を引数で ...

続きを見る

C言語 C++言語 機能を模倣
C言語でC++言語の機能を模倣する方法

こういった私から学べます. C言語でC++言語みたいにコードを書けたら便利だと思ったことはありませんか? そんなあなたにC言語でC++言語の機能を模倣する方法を紹介します. 基本的にはGCC/Clan ...

続きを見る

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

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

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

友だち追加

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

-C LANGUAGE, TECHNOLOGY
-, , , , ,