Last active
February 1, 2020 15:51
-
-
Save key-moon/dad13b8d987ac307368f3b6a1bb9ed16 to your computer and use it in GitHub Desktop.
プリプロセスつらい
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//複数行コメントアウトを置換しないと、本来入らないプリプロセッサが入ってしまう。 | |
/* | |
#pragma hoge fuga~ //←本来入らないはず | |
*/ | |
//リテラルを考慮せずに置換すると破滅する:ここでint nにはCS0168は出ない `/\*.*\*/|//.*$`とかで適当に置換をすると出るようになる | |
var a = ("/*") *//* | |
#if DEBUG | |
new MyClass("*/"); | |
#pragma warning disable CS0168 | |
var b = ("/*") *//* | |
#endif | |
new MyClass("*/"); | |
int n; | |
//考慮するにもリテラルはいろいろあって、以下の区別とかもしっかりしないと駄目 | |
//例えば、エスケープを考慮したものでもいろいろある。 | |
//組み合わせるといくらでもコーナーは作れるので、まともな構文解析に通すしかなさそう。 | |
var s1 = $@" \"" "; | |
var s2 = @$" \"" "; /*s1の別の書き方:@が離れててめんどい 現にC#8.0対応してなくて構文エラーが出てる→*/ | |
var s3 = " \" "; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment