#C言語でAOP
C言語でわざわざアスペクト指向プログラミング(AOP)をやっています.
C言語ベースなので,AOPと言っても処理系のACC(AspeCt-C)はトランスレータとして実装されてます.
ここからダウンロード可能です.最新版でもVersion0.9の開発版ですが…
ACC:AspeCt-C
現在はC言語ベースのRTOSをカスタマイズするために使わせてもらっています.
#ACCでAOP
かんたんにACCの使い方を書いときます.
アスペクトの定義(aspect.acc)はこんな感じ.
アスペクトは処理を織り込むポイントカットと処理を記述するアドバイスからなる.
aspect.c
#include <stdio.h>
before() : execution( int main(void) ) {
printf("called the advice before main func\n");
}
main.c
#include <stdio.h>
int main() {
printf("in main func\n");
}
- アスペクトファイルとCファイルのプリプロセッサを展開.
- 展開したファイルをACCに入力
- 出力されたファイルをGCCでコンパイル
1.1. gcc -E aspect.c > Aaspect.acc
1.2 gcc -E main.c > Amain.mc
2. acc Aaspect.acc Amain.mc
3. gcc Aaspect.c Amain.c
こんな感じで実行ファイルが生成される.
アスペクトをACCでトランスレートすると,アドバイス部をinline関数として定義し,対象のCソースコード内で呼び出すコードを生成する.