Bison 1.875 から Bison 3.0.4 にアップグレードしていますが、下位互換性を維持したいと考えています。
- 関数呼び出し
yyparse(void *)
は 1.875 では機能しますが、3.0.4 では機能しません - 関数呼び出し
yyparse()
は 3.04 では機能しますが、1.875 では機能しません
Bisonは、実際のバージョンが最新かどうかを判断し、使用する関数呼び出しを決定するため#define YYBISON_VERSION "3.0.2"
に使用した行を含む cpp ファイルを出力します。strcmp
int ret = 0;
if(bisonVersionCheck < 0)
{
ret = yyparse(void *);
}
else
{
ret = yyparse();
}
しかし、ご覧のとおり、これは実行時に決定されるため、コンパイラは関数呼び出しに対して何もできないと文句を言います。
プリプロセッサ ディレクティブを使用して適切な関数呼び出しを選択できるように、使用できるマクロが必要です。バイソンのドキュメントでそのようなマクロを見つけることができません。
- 「__BISON_VERSION」そっくりマクロについて知っている人はいますか?
- バイソンバージョンに基づいて正しい関数呼び出しを行う別のアイデアを持っている人はいますか?