Skip to content

Instantly share code, notes, and snippets.

@key-moon
Last active February 1, 2020 15:51
Show Gist options
  • Save key-moon/dad13b8d987ac307368f3b6a1bb9ed16 to your computer and use it in GitHub Desktop.
Save key-moon/dad13b8d987ac307368f3b6a1bb9ed16 to your computer and use it in GitHub Desktop.
プリプロセスつらい
//複数行コメントアウトを置換しないと、本来入らないプリプロセッサが入ってしまう。
/*
#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