マクロであれこれやってみよう

マクロを使ったプログラム

プログラムの記事も書いていくつもりなので初心に戻って簡単なところも載せていきます!

栄えある最初の記事はマクロの使い方をいくつか紹介したいと思います。
※しょぼいとか言わないでね~

基本的なマクロの実装
  1. #define NUMBER (10)
  2. #define MAX(a, b) ((a) > (b)? (a): (b))
  3.  
  4. printf("%d", MAX(3, NUMBER));

結果:10

このようにマクロは処理や値の置き換えを行うために使用します。
マクロの中で他のマクロを使用することも出来ます。

マクロを使用する際の注意点

使用する際の注意点としてマクロと関数の違いを理解しておく必要があります。

  1. #define MAX(a, b) ((a) > (b)? (a): (b))
  2.  
  3. int num = 5;
  4. printf("%d", MAX(3, ++ num));
  5. // 展開結果:printf("%d", ((3) > (++ num)? (3): (++ num));

結果:7

このようにマクロは関数と違って単純に記述を置き換えるだけの機能です。
なので引数に渡す内容によっては思いがけない処理になってしまう場合があるのでお気をつけて。

マクロによる文字列作成

マクロは引数に渡した内容を文字列に変換する機能があります。

  1. #define STRING(x) #x
  2.  
  3. printf("%s", STRING(string));
  4. // 展開結果:printf("%s", "string");

結果:string

このように引数の文字に#を付けて記述することで文字列として扱うことが出来ます。

マクロによる結合

マクロは引数に渡した文字を結合する機能があります。

  1. #define STRING_A "A"
  2. #define MARGE(x) STRING_##x
  3.  
  4. printf("%s", MARGE(A));
  5. // 展開結果:printf("%s", STRING_A);

結果:A

このように引数の文字に##を付けると文字を結合して使用することができます。

可変引数のマクロ

マクロには関数と同じく可変引数にする機能があります。

  1. #define PRINT(...) printf(__VA_ARGS__)
  2.  
  3. PRINT("%s %d", "macro", 10);
  4. // 展開結果:printf("%s %d", "macro", 10);

結果:macro 10

このように引数にを記述すると__VA_ARGS__で内容がそのまま取得することが出来ます。


こんな感じでマクロにもいろんな使い方があります。
これらを組み合わせることでほんとに色んな場面で使えるので初歩的だけど使いこなすと強力な武器になります!

そんなの知ってるよって方も是非もう一度マクロの便利さに浸ってみてください!
プロでも意外と使いこなせてない人が多いんじゃないかな~と個人的には思ってます。

それでは今日はこの辺で!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です