challenge メソッドのフック

例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。

そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。

Posted feedbacks - C

Cのマクロです。
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の順に呼び出されることを保証できないのではないでしょうか。 評価が記述されている順番に行われることが保証されているのは条件演算子(?:),論理和演算子(||),論理積演算子(&&),カンマ演算子(,)のみだったと記憶しています。 (カンマ演算子以外は必ずしも全ての被演算子が評価されるとは限らないのでこのように列挙するのは微妙な気もしますが)

あ、ほんとだ。
左からの評価が保証されるのは、&& 、 || 、カンマ演算子の「 , 」、三項演算子の「 :? 」だけみたいですね。(参考ページより)
gcc でコンパイルしてサクッと動いたからよしとしてしまいました。
コンマで戻り値を返すにはどうしたらよいでしょう?
Cだとその場で変数を宣言できないし…。

Index

Feed

Other

Link

Pathtraq

loading...