10秒目をつむったら…

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があります。


どうしてこうなるのでしょうか。

A 回答 (4件)

同じく2008は所持していないので2005で。


# 2008EEのISOイメージは保管してあるけど、今の環境には2015Communityが入れてあるので…。

ソリューションエクスプローラを表示して、プロジェクト下の対象ソースファイルを選択します。
右クリックしてプロパティを選択。
そのソースファイル個別の設定が確認できますので「C/C++」を展開して「コマンドライン」をクリックします。
右側に表示されるのがビルド痔のコマンドラインになります。
#2さんが指摘している個別に~のヤツですね。
C/C++ツリー上に「詳細」があるのでクリックします。(コマンドラインの1つ上かな)
「コンパイル言語の選択」で"/TP"か"/TC"か選択できます。
    • good
    • 0
この回答へのお礼

返答ありがとうございます
やってみます

お礼日時:2016/05/09 00:05

2008は所持してないので PRJ設定は詳細回答出来ませんが、


/TP は拡張子で決めていたんじゃないかと。

推測で言えば、もし「規定値」の選択が有れば、それで /TC が付くんじゃないかと…
    • good
    • 0

>ところが、実際に当該プロジェクトのオプションを見てみると



プロジェクトのオプションは"絶対"ではなく、ソースファイル毎に指定出来るはずですよ。
だから編集しようとしたファイルには /TC が付いているはず。
ビルドログを見た方が良い。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

ご発言内容の解説をお願いします。
個別に設定しようとしましたが、出来ませんでした。

お礼日時:2016/05/07 17:12

回答じゃないんだけど, なんか設定が矛盾してるような気がする.



/TP は「すべてのファイルを C++ のソースとしてコンパイルする」オプションだよね. 「Cプロジェクト(C++プロジェクトでない)」でそう設定するのって, おかしくないかなぁ.

余談:
C で「変数の宣言はブロックの先頭でしか行えない」というのは古い仕様です. Microsoft がいまだにこの古い仕様を引きずってるだけで, 現在の C の規格では C++ と同じくブロックの先頭でなくても宣言が可能です.
    • good
    • 0
この回答へのお礼

回答ありがとうございます

捕捉します
ネットからダウンロードした、Cソースがあります。数は30程です。
OSと問わない汎用のソースです。
これをコンパイルするためにVS2008から
File->New->Projec From Existing Code
を選び、コンパイルしました(英語版VSなので日本語版だと表記が違うと思います)。

コンパイルに至る過程で、特に設定していません。

VSとしてはCしかファイルがないのであるからCプロジェクトとして解釈するのかと思いました。実際に変数の宣言はブロックの先頭でしか行えないからです。

しかし、実際には/TPがついていた、ということです。

ご発言通りに矛盾していますが、意図したものではありません。

お礼日時:2016/05/07 17:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!