Visual Studio .NET にまつわるよくある質問

メディア教育課の管理する実習室の Windows にインストールされたVisual Studio .NET 2003 を使って C 言語のプログラミングをするときに出会うかもしれない問題です.

`プロジェクトを開く'を選んでも`開けない'

これは, 右側のソリューションエクスプローラが消えている状態だという ことでしょうか. ソリューションエクスプローラを表示するには, 表示 > ソリューションエクスプローラ です.

ビルドの際に `_main はすでに (何とか).obj で定義されています' と言われる.

1個のプロジェクトの中に, main 関数を含む *.cファイルを2個以上入れていませんか? 1個のプロジェクトに実行ファイルは1個, したがって, main 関数は1個だけです. 2個のプログラム(実行ファイル)を作りたいときは, 2個のソリューション/2個のプロジェクトを作りましょう.

この授業では, 1個のソリューションに1個のプロジェクト, 1個のプロジェクトに1個の .c ファイル(ヘッダーファイルは無し)という使い方をします.

ビルドの際に`構文エラー: `;'が`識別子'の前にありません'と言われる

言葉通り,

    printf("Hello world!\n")
のように, 行末のセミコロン;が足りないというエラーです.

また, 一見 セミコロン; が不要と思われる場所でこのエラーが発生することがあります. それは, {} が match していないためであることがあります. 次の例で考えてみましょう.

int main(int argc, char **argv){

    return do_hello_world();

/* } */                  /* } 付け忘れ */

int do_hello_world(void){
    printf("Hello world!\n");
    return 0;
}
C++コンパイラは, int do_hello_world(void){ も main 関数の中にあると解釈することになります. ところが, 関数の中で関数を定義することはできません. そこで C++ コンパイラーは,
int do_hello_world; /* ; を補いました */

(void){
...
} /* 
と, 変数の宣言と解釈し, do_hello_world の後に セミコロン; がないよ, と文句を言うのです. C++ では(Cと異なり, またJavaと同じ様に)関数定義の先頭でなく, 任意の場所で変数の宣言が可能なのでした.

ビルドの際に`文字 `0x81' は認識できません' と言われる

ソースに全角スペースが含まれています. 半角スペースに直しましょう.

ビルドの際に `ファイル (何とか).exe を削除できませんでした' と言われる

これは, 実行中のプログラムを(終了しないまま)再度ビルドしようとした場合でしょうか. ビルドする前に, プログラム(開始で生じるウィンドウ)を終了しておきましょう.

ビルドの際に `LINK: 書き込みモードで Debug/(何とか).exe を開けません' と言われる

これは, 実行中のプログラムを(終了しないまま)再度ビルドしようとした場合でしょうか. ビルドする前に, プログラム(開始で生じるウィンドウ)を終了しておきましょう.

ビルドの際に `error LNK2019:未解決の外部シンボル WinMain@16が関数 WinMainCRTStartupで参照されました。fatal error LNK1120:外部参照1が未解決です。'などと言われる

空のWin32コンソールプロジェクトとして作られてない のでしょう(たぶん, 空のWin32プロジェクトなのでは?). ソースファイルはとっておいて, Win32コンソールプロジェクトとして作り直して, 既存項目の追加でソースファイルを戻せばいいのでは.
Copyright © 2003,2004 Saburo Higuchi. All rights reserved.
樋口三郎 http://www.math.ryukoku.ac.jp/~hig/ hig mail address