C言語プログラミング マクロで可変引数を扱う方法とデバッグprintf
スポンサーリンク
C言語で可変引数を扱う場合は、stdargのva_argなどを利用します。
マクロ(define)でも可変引数を扱いたいことがあります。
マクロで可変引数を扱う場合は、__VA_ARGS__を利用します。
コンパイル
__VA_ARGS__とprintfを利用して簡単にデバッグ用のprintfを作成することができます。
デバッグが終わったら、dprintfをなしにしてしまえばOKです。
マクロ(define)でも可変引数を扱いたいことがあります。
マクロで可変引数を扱う場合は、__VA_ARGS__を利用します。
#define foo(...) bar(__VA_ARGS__)
デバッグで関数名と行数を出したいときがあります。
場合によっては、ファイル名とライン行とかもやります。
そんなときは、このようなマクロを書くと便利です。
関数名:ライン行 デバッグメッセージ
#define dprintf(s,...) printf("%s:%d: " s, __func__, __LINE__,__VA_ARGS__)
ファイル名:ライン行 デバッグメッセージ
#define dprintf(s,...) printf("%s:%d: " s, __FILE__, __LINE__,__VA_ARGS__)
ファイル名:ライン行:関数名 デバッグメッセージ
#define dprintf(s,...) printf("%s:%d:%s " s, __FILE__, __LINE__,__func__,__VA_ARGS__)
arg.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdarg.h> 4 5 #define dprintf(s,...) printf("%s:%d: " s, __func__, __LINE__,__VA_ARGS__) 6 7 int 8 main (int argc, char *argv[]) 9 { 10 int i = 300; 11 char *p = "hoge"; 12 dprintf ("%s %d\n", p, i); 13 ++i; 14 ++p; 15 dprintf ("%s %d\n", p, i); 16 17 exit (EXIT_SUCCESS); 18 }
コンパイル
cc arg.c
実行結果
main:13: hoge 300 main:16: oge 301
__VA_ARGS__とprintfを利用して簡単にデバッグ用のprintfを作成することができます。
デバッグが終わったら、dprintfをなしにしてしまえばOKです。
#define dprintf(...) ((void)0)
関連
[2008-06-23-1] C言語プログラミング マクロで可変引数を扱う方法とデバッグprintf
[2008-06-23-2] C言語プログラミング ifdefでデバッグする方法
[2008-06-17-1] C言語 可変引数 va_arg
参照しているページ (サイト内): [2008-06-23-2] [2008-06-23-1] [2008-06-17-1]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12