GCC
には、関数が呼び出されるたびに、または関数が戻るたびにルーチンを呼び出すことができるインストルメンテーションに関する優れた機能があります。
今、私は自分のシステムを作成して他のコンパイラに移植できるようにし、必要な関数 (パラメーターの数が異なる可能性があります) をインストルメント化できるようにしたいので、両方の状況で 2 つのマクロを考えていました。define句だけで活性化されるような何らかのプロファイルを作ろうと考えています。
#define FUNCT(t,function_name,...) \
(t) function_name(...) { \
(void) *func_pointer = &(function_name); \
start_data(func_pointer, myclock());
#define RETURN(x) {stop_data(func_pointer, myclock()); return (x);}
FUNCT(BOOL, LMP, const int prof, const int nmo))
if (nmo <= 5 ||
prof > (prof_l / 3)) {
.... do long operations....
RETURN(FALSE);
}
... do more....
RETURN(TRUE);
}
しかし、私はそれを機能させることができません。誰かがこれで私を助けることができますか? それとも達成するのが難しい仕事ですか?
私の頭に浮かぶ他の選択肢は、マクロなしで関数を宣言させることです。名前を知らなくても関数ポインタを知る必要がある場合は、VB で Me を使用してフォームを呼び出すときのように、それは一般的なエイリアスです。出来ますか?