Microsoft Visual C++使う上でのメモ

2003/10/14

1999年度から「プログラミング概論I及びII」を担当し、コンパイ ラとしてg++ を使ってきました。しかし、2003年度から、受講生のコンピュー タ環境変化に併せてMicrosoft Visual C++を使うこととなりました。そこで、 気が付いたこと(びっくりしたこと?)のメモを作っておきます。

  • コンソールアプリケーションの実行
  • Microsoft拡張機能と変数スコープ
  • Microsoft拡張機能とSTL
  • コンソールアプリケーションの実行 2003/10/14

    Microsoft Visual Studio内からプログラムを実行すると、普通はコ マンドラインオプションを渡すことができません。明示的にコンソール アプリケーションと実行するには次の手順で行います。

    • 実行形式(ファイル名.exe)のあるディレクトリを開きます。
    • コマンドプロンプトを開きます。
    • 実行形式(ファイル名.exe)をコマンドプロンプトのあるウィンド ウへドラッグします。
    • コマンドプロンプトのウィンドウでリターンキーを押します。
    Microsoft拡張機能と変数スコープ 2003/10/14

    Microsoft Visual C++には、Microsoft拡張機能というものが付いて います。この機能とANSIIの間で変数スコープの解釈の差があります。つ まり、この機能していると、次のような簡単なコードさへコンパイルで きません。もちろん、このコードはg++ では問題なくコンパイルできま す。コンパイルできない理由は、forループの変数i が二度定義されて いるからです。

    int main(int argc, char** argv)
    {
      int a=0;
      for(register int i=0;i<10;i++)a+=i;
      for(register int i=10;i<20;i++)a+=i;
      return 0;
    }
    

    Microsoft拡張機能を止めれば、上のコードはコンパイルできるように なります。コンパイラに/Zaというオプションを渡すか、環境変 数CLに値/Zaを設定することで可能です。

    Microsoft拡張機能とSTL 2003/10/11

    C++ では、様々な汎用的な機能がSTL(Standard Template Library)として整備されています。Microsoft Visual C++でもSTL が 使えます。例えば以下のようなコードです。

    #include <iostream>
    using namespace std;
    int main(int argc, char** argv)
    {
      cout <<"Hello\n";
      return 0;
    }
    

    ところが、この機能はMicrosoft拡張機能が有効の時だけ使えます。 つまりMicrosoft拡張機能を無効とすると、上の簡単なプログラムは 100以上のエラーを吐き出し、コンパイルできません。


    戻る