ものがたり(旧)

atsushieno.hatenablog.com に続く

#75984:Several preprocessor handling bugfixes

って自分で投げた奴だけど。

#pragmaの扱いは.NET 2.0のcscでは混乱しているようだ。

.NET 1.xのcscでは#pragmaなどというpreprocessor directiveは認めていられないため、.NET 2.0環境で書いたソースコードの中で#pragmaを使用したら、.NET 1.xではコンパイルすることが出来ない。しかも実はこの#pragma、-langversion:ISO-1を付けてコンパイルしても見逃してしまうのである。

一方で、mcsでやっているように、#if NET_2_0 ... #endif の間は.NET 2.0互換のコードだから何を書いてもオッケー!と思って#pragmaとか書いて、.NET 1.x互換環境下とソースコードを共用しようと思って -langversion:ISO-1 を付けてコンパイルすると、.NET 2.0環境ではコンパイルできても、.NET 1.x環境下ではコンパイルできない、ということになるわけだ。

たぶんMicrosoftの開発者は、#if NET_2_0 ... #pragma disable warning ... #pragma restore warning ... #endif みたいなことを書こうとして出来なくて、こういう「修正」を追加してしまったのだろうけど、そういう修正の方向性自体がそもそもイケてないはずだ。MSの中ではそういうパラレルな開発をやっていないかもしれないけど、開発現場に混乱が起こることは必至だろう。それともまたいつものようにSPで「こっそり」修正するのかな。

たぶん、これをMSDN product feedbackに投げると、とーーーっても面白い反応が返ってくると思うのだけど、どうだろうね。