広告スペース(バナー)
🔧C言語 レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 51 / 68

マクロで型を問わない汎用の処理を書こう

このレッスンでは、C言語のマクロを使って型を問わない汎用の処理を書く方法を学び、複数の型に対応できる柔軟な処理を作れるようになることを目標にします。「C言語 マクロ 使い方」で調べている方向けです。

C言語には他の言語のようなジェネリクスはありませんが、#defineマクロを使うと、型を指定せずに動作する処理を書けます。プリプロセッサによってコンパイル前に単純に文字が置き換わる仕組みを利用しています。

サンプルコードでは、#define LARGER(a, b) ((a) > (b) ? (a) : (b))というマクロを定義し、整数のLARGER(3, 7)と小数のLARGER(3.5, 2.1)のどちらも同じマクロで比較できています。マクロは実行時ではなくコンパイル前に置き換えられる点が関数と異なります。

初心者がよくつまずくのが、マクロの引数を必ずかっこで囲む必要がある点です。(a)のようにかっこで囲まないと、複雑な式を渡したときに意図しない優先順位で計算されてしまう危険があります。

実際の開発現場では、型ごとに同じような処理を何度も書かずに済む便利さの一方、デバッグのしにくさなどの副作用もあるため、使い所を見極める必要があります。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではC言語を直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
型を問わず使い回せる、便利な比較関数が作れるようになります。
広告スペース(バナー)
広告スペース(記事内)