Open rsk0315 opened 4 years ago
oj-bundle
でライブラリを運用することを考えると、この種のマクロ自体が不要な気もします。(いま思いつかないだけで、それっぽい理由があるかもしれません?)
@rsk0315 実際の利用例もほしいです。 実用的な範囲内でなら解決できるかもしれないためです。
なお、一般的な解決は明らかに不可能です。実際に提出された後のコンパイル環境のマクロ (標準ライブラリ内で定義されるやつを含む) が不明なためです。展開後のコード量が指数的に増える例とか無限長になる例とかはすぐ作れるはず。
一般的な解決が不可能というのはそうですね。 以前使っていた例は、次のような感じでした。
この例で #ifdef CALL_FROM_TEST
と #endif
があるのは、ファイルの中身をそのまま連結して (#include
の展開はせずに) 提出するためのものということであってますか?
もしそうなら「oj-bundle
を使うならこの種のマクロ自体が不要」というコメント https://github.com/kmyk/online-judge-verify-helper/issues/218#issuecomment-609465576 は正しそう。#ifdef CALL_FROM_TEST
と #endif
を消す方向でお願いします。
(ヒント: awk -i inplace '(/#ifdef CALL_FROM_TEST/ || flag && /#endif/) { flag = !flag ; next } { print }' FILE ...
で #ifdef CALL_FROM_TEST
と次の #endif
を消せる)
https://github.com/beet-aizu/library/blob/240780cad73d47448a50d5e87c4496933093ce67/tools/fastio.cpp
一番上の行に #ifndef call_from_test
があって一番下の行に #endif
があるので、それらが include guard 扱いされてしまってるぽいですね
C++ のライブラリ中で
のようにして別のライブラリを
#include
しようとすると bundle がこわれちゃう。a.test.cpp
側からのようにして
#include
した場合のみ展開されてほしくて書いていました。https://github.com/kmyk/online-judge-verify-helper/blob/e0f3c547985e791402a9d951ea56480cc97ea9a2/onlinejudge_verify/languages/cplusplus_bundle.py#L281 つらそう。