メソッドのフック
Posted feedbacks - C
Cのマクロです。
define を関数定義の前にするとコンパイル通りません。
なんとか戻り値を取りたくて or にしました。
define を関数定義の前にするとコンパイル通りません。
なんとか戻り値を取りたくて or にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h>
int func(int n, char *s)
{
printf("n = %d s = %s\n", n, s);
return n;
}
int before()
{
puts("入るよー");
return 0;
}
int after()
{
puts("出たよー");
return 0;
}
#define func(n,s) (before() | func(n,s) | after())
int main(void)
{
int ret = 0;
ret = func(3, "文字列");
printf("戻り値:%d\n", ret);
return 0;
}
|
その書き方ではCの言語仕様上では必ずbefore,func,afterの順に呼び出されることを保証できないのではないでしょうか。
評価が記述されている順番に行われることが保証されているのは条件演算子(?:),論理和演算子(||),論理積演算子(&&),カンマ演算子(,)のみだったと記憶しています。
(カンマ演算子以外は必ずしも全ての被演算子が評価されるとは限らないのでこのように列挙するのは微妙な気もしますが)




todogzm
#6017()
Rating0/8=0.00
例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。
そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。
[ reply ]