シナリオをPerlでCのデータに変換してコンパイルしています。
置換とか評価とか、面倒なことはコンパイラに任せています。

#! /bin/bash
cat $1 | gcc -E -

これだけでも、コメントとディレクティブを処理してくれるツールになります。