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

Time-stamp: "2010-05-10 Mon 13:38 JST hig"

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

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

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

ビルドの際に `M_PI': 定義されていない識別子です, と言われる

Linux のCでは math.h を include すると, M_PI などの数学定数のマクロが使えました. しかし, これは ANSI C の標準の機能ではなく, サービス機能です. Visual Studio .NET で M_PI などの数学定数のマクロを使うには, math.hをinclude する前に, _USE_MATH_DEFINES を define しなければなりません.

#define _USE_MATH_DEFINES
#include <math.h>

なお, コマンドライン, IDEとも, Linuxのコマンドラインででcc-lmオプションを与える, に相当することは不要です.

ビルドの際に `_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コンソールプロジェクトとして作り直して, 既存項目の追加でソースファイルを戻せばいいのでは.

ビルドの際に `LINK1201: プログラムデータベース …\Debug\(何とか).pdbに書き込めません, と言われる

何らかの原因で, 異常な状態で, ファイル (何とか).pdb が残ってしまったようです. 手で(エクスプローラで)このファイルを削除するか, Visual Studio を再起動するかしてみましょう.

実行の際に `Line: 39. The variable 'n' is being used without being defined.'というダイアログがでて実行できない

variable=変数, define=定義(今の場合, 初期化のことです). 行番号39あたりをチェックしましょう.
Copyright © 2003-2006 Saburo Higuchi. All rights reserved.
樋口三郎 http://www.math.ryukoku.ac.jp/~hig/