ラベル C++ の投稿を表示しています。 すべての投稿を表示
ラベル C++ の投稿を表示しています。 すべての投稿を表示

2014年11月14日金曜日

[C言語] めっちゃログを出力する人へのTips


お久しぶりです、筆者です。

デバッグしてるときにコンソール上にログを出力したいとき、ありますよね。
そんなとき、ソースコード中にこんな関数を入れている人もいるかもしれません。
fprintf(stderr, "i = %d, j = %d", i, j);
もちろんprintf使ってもいいんですが、これだとターミナル上でパイプライン処理したときなんかに影響を与えてしまいます。
でも毎回stderrと入力するのもめんどくさいですね、小さなことですが。
なので、マクロを使ってもっと短い関数名で定義しておけば良いと思います。
こんな感じ。
#define eprintf(...) fprintf(stderr, __VA_ARGS__)
このマクロの中で、...というのは可変長の引数を表しています。
fprintfは引数の数が可変ですからね。
この部分は実際の関数の中の__VA_ARGS__の部分にそのまま入ります。
なのでこのマクロを使えば、
eprintf ("i = %d, j = %d", i, j);
と書くと一番最初に書いたコマンドに展開されることになります。
便利ですね。

各所に散りばめられたログ出力コードのオン・オフを切り替える 

デバッグしている最中は色んな情報がほしいので、色々なところでログを出力してしまいます。
最終的にバグが取れたときに、もう必要のないeprintfによるログ出力は消しましょう。
eprintf関数を以下のように定義し直します。
#define eprintf(...) do {} while(0)
これでeprintfは何もしないコードに置き換えられます。
良いでしょ。
使え。

2013年2月2日土曜日

グローバル変数の危険性

プログラムで何でも便利だからといって何でもかんでもグローバル変数にするのはよくありません。




2012年12月2日日曜日

FAQ C言語

C言語で疑問をもつとグーグル先生に相談する方も多いと思いますが、教科書的なものをみつけたのでこちらも参考にすると知識が深まりそうです。

FAQ


*ただし、ちょっと古いです。