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

2015年2月25日水曜日

【YASnippet強化】 auto-complete-clangのご紹介



Emacsで関数とかforとかの補完をする定番といえばYASnippetですが,自作関数のスニペットは自分で作らないといけないのがすこし面倒です.
そこで今日は自作含めてあらゆる関数をyasnippetで入力できるようになる神プラグイン,auto-complete-clang を紹介します.


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年11月25日月曜日

clangでcomplex型使った時のwarningを消す



標準Cライブラリの複素数型を使う時,
complex c;
みたいな変数宣言を含んだファイルをclangでコンパイルするとすごくwarningが出る.

厳密には,
_Complex double c;
みたいに複素数の実虚の型まで含めて宣言してあげる必要があるらしい.

ただ,これだと型名が長くてめんどくさい.
今までどおり complex c; で定義したい,かつwarningも出したくない場合は,
#undef complex
typedef _Complex double complex;
のような文章を複素数型のincludeの後に入れてあげると良い.

2013年2月2日土曜日

グローバル変数の危険性

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




2012年12月2日日曜日

FAQ C言語

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

FAQ


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