VisualStudio C++ 2008で、或るCプロジェクト(C++プロジェクトでない)のコードを編集しようとして、コードの中間で変数を宣言しました。
int abc = 123;
するとエラーになりました
error C2143: syntax error : missing ';' before 'type'
そこで、試しにそれをブロックの先頭に持っていくとエラーでなくなりました。
私の記憶では
Cにて、変数の宣言はブロックの先頭でしか行えない
C++にて、変数の宣言は何処でも可能
です。
そこで、CファイルをCPPとして扱ってもらおうとネットを検索すると/TPオプションを付けるべしとの情報がありました。
ところが、実際に当該プロジェクトのオプションを見てみると
/D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
となっており、/TPがあります。
どうしてこうなるのでしょうか。
No.4ベストアンサー
- 回答日時:
同じく2008は所持していないので2005で。
# 2008EEのISOイメージは保管してあるけど、今の環境には2015Communityが入れてあるので…。
ソリューションエクスプローラを表示して、プロジェクト下の対象ソースファイルを選択します。
右クリックしてプロパティを選択。
そのソースファイル個別の設定が確認できますので「C/C++」を展開して「コマンドライン」をクリックします。
右側に表示されるのがビルド痔のコマンドラインになります。
#2さんが指摘している個別に~のヤツですね。
C/C++ツリー上に「詳細」があるのでクリックします。(コマンドラインの1つ上かな)
「コンパイル言語の選択」で"/TP"か"/TC"か選択できます。
No.3
- 回答日時:
2008は所持してないので PRJ設定は詳細回答出来ませんが、
/TP は拡張子で決めていたんじゃないかと。
推測で言えば、もし「規定値」の選択が有れば、それで /TC が付くんじゃないかと…
No.1
- 回答日時:
回答じゃないんだけど, なんか設定が矛盾してるような気がする.
/TP は「すべてのファイルを C++ のソースとしてコンパイルする」オプションだよね. 「Cプロジェクト(C++プロジェクトでない)」でそう設定するのって, おかしくないかなぁ.
余談:
C で「変数の宣言はブロックの先頭でしか行えない」というのは古い仕様です. Microsoft がいまだにこの古い仕様を引きずってるだけで, 現在の C の規格では C++ と同じくブロックの先頭でなくても宣言が可能です.
回答ありがとうございます
捕捉します
ネットからダウンロードした、Cソースがあります。数は30程です。
OSと問わない汎用のソースです。
これをコンパイルするためにVS2008から
File->New->Projec From Existing Code
を選び、コンパイルしました(英語版VSなので日本語版だと表記が違うと思います)。
コンパイルに至る過程で、特に設定していません。
VSとしてはCしかファイルがないのであるからCプロジェクトとして解釈するのかと思いました。実際に変数の宣言はブロックの先頭でしか行えないからです。
しかし、実際には/TPがついていた、ということです。
ご発言通りに矛盾していますが、意図したものではありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
エラーの原因は?「この関数の...
-
コンパイルするときに、ファイ...
-
Visual Studioでプロジェクトが...
-
ボーランドのフリーソフトの使...
-
srand48? drand48?
-
プリコンパイル?
-
VB6で、非表示モジュール(?)の...
-
VB.NETでActiveX(OCXファイル)作成
-
よく似たプロジェクト
-
ソースから参照しているOCXの一...
-
VC++でプロジェクト名の変え方...
-
DLLのスタティックリンクは可能?
-
プログラミング
-
VB6 exeファイルのプロパティの...
-
自作したActiveXの配布&インス...
-
他の.CPPファイルに定義した関...
-
コンパイルエラー「include フ...
-
同じソースコードなのにバイナ...
-
DirectXのパス設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで他のプロジェクトで作...
-
ACCESSのEXEを作るのは可能...
-
ソースから参照しているOCXの一...
-
エラーの原因は?「この関数の...
-
VB6で、非表示モジュール(?)の...
-
コンパイルするときに、ファイ...
-
C#のクラスをVB.netで使用したい!
-
VB.NETでActiveX(OCXファイル)作成
-
VC++でexeファイルが作成できま...
-
同じソースコードなのにバイナ...
-
VS2010 ProductVersion 変更
-
プリコンパイル?
-
VC++ 2005 Intellisenseを更新....
-
他の.CPPファイルに定義した関...
-
Visual Stadio2008 Releaseビル...
-
Visual Studioを使ったフォーム...
-
【C#】exeファイルに複数アイコ...
-
VB6 exeファイルのプロパティの...
-
コンパイルエラー「include フ...
-
関数がDLLファイル内に見つかり...
おすすめ情報