テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(macro-of-inline report) 関数呼び出し元にランダムなラベルを与えることに成功

この3日で一気にやって, とりあえず基礎的な実装は終わったと思います. 最後の仕事は, マクロの呼び出し元に対してランダムなラベルを与えることでした. 今, 一つのファイルの中でランダムなラベルの集合を管理していますから, 重複はありません. ファイルの外までは考慮する必要がないため, これで十分.

関数呼び出し元にラベルを与える方式は, 元をたどると, 与えられたコードが標準的なCで書かれていることに依存しています. これが少しだけ不安です.

macro-of-inlineは, さまざまな検討の結果, 以下の制約があります.

  • 入力するファイルがcpp -Eを通ってること(includeやマクロは展開済)
  • void以外の値を返す関数をマクロ化することは無理です. 不可能と判断しました.

今後は,

Before:

inline void f1(void) { x = 1; }
inline void f2(int
  x) {   }

inline int f3(void)
{
  x = 3;
  f2(x);
}

int main()
{
  f1();
  return 0;
}

After:

#define f1(exit_func_compound) \
do { \
  x = 1; \
  exit_func_compound: \
  ; \
 \
} while(0)
;

#define f2(exit_func_compound, x) \
do { \
  exit_func_compound: \
  ; \
 \
} while(0)
;

inline int f3(void)
{
  x = 3;
  f2(wpAWKfOEaGQIubeg, x);
}

int main()
{
  f1(zSgAgetjovABtozR);
  return 0;
}