Visual C++をちょっと見直した。
高木です。こんばんは。
ここのところ、仕事でも趣味でも、ターゲットはWindowsなのにCやC++を使うときはずっとGCCを使っていました。
MinGW-w64のGCCをMSYS2の環境で使っていたのです。
Visual C++ではいろいろ嫌な思いをしたので、しばらく避けていました。
ところが、最近になって仕事でVisual C++を使うことになってのです。
それも、最新の2017を。
Visual C++は、最新の規格への追従状況がいまいちという印象もずっとありました。
実際そうなのですが、cpprefjpの「コンパイラの実装状況」を見ると、確かにGCCやClangに対して見劣りがします。
ただ、よくよく見てみると、GCCの最新版は6.3ですが、このバージョンとVisual C++ 2017(バージョン14.1)を比べると、それほど変わらないことがわかります。
また、実際の開発では、コア言語の細部の仕様のどうこうより、ライブラリの方が重要です。
その意味では、Visual C++ 2017のライブラリのサポート状況は決して悪くありません(細部までは知りませんが)。
ライブラリのサポート状況は悪くなくても、そもそもVisual C++の嫌なところはそのまま残っています。
コマンドラインでいまいち使いにくいところとか、_s付きの関数を使えとうるさい(しかも、Visual C++の_s付き関数はC11のそれと微妙に仕様が異なる)とか、C99やC11がまともにサポートされないとか、ランタイムのDLLがウザいとか、いろいろあります。
GCCというかMinGW-w64にも不満がないわけではありません。
とくに、std::localeがCロケールしかサポートしないところ、そしていまだに多バイト文字を識別子に使えないところが問題ですね。
Visual C++と比べて存在しない機能はいろいろありますが、GCCを責めても仕方がないものもあります。
たとえば、auto-linkが使えないとか、構造化例外が使えないとかです。
こんな感じで一長一短なのですが、あとは好みの問題でしょうね。
まあ、Visual C++を使うことになったわけですから、この機会にいろいろ使い込んでみたいと思います。