2011-07-19 14 views
0

誰もが知っているように、C標準では、関数本体の先頭に変数を宣言する必要があります。MSVCとGCC:関数内の変数宣言

C++では、使用する直前、どこでも宣言できます。

MSVCは、.cおよび.cppソースファイルで作業する場合、標準に従います。

GCCは、ソースファイルが、私はこれによるMSVCでGCCでうまくコンパイルしていない膨大な数の.cファイルを持っている

.cの場合でも、関数本体のどこにでも変数を宣言することができます。私はそれらすべてを.cppにリネームすることはできません。

MSVCコンパイラに.cファイルをC++のものとして扱わせる簡単な方法はありますか?

+0

C(特にC99)でないことに注意してくださいC++のサブセットであるため、動作しない可能性があります。 –

+0

これは関数本体の上部にありません。ブロックの上部にあります(ブロック内にあります)。以下のスニペットは有効なCです: 'int main(void){int a; {int top_of_block; top_of_block = 42; } a = 42;返信0;} ' – pmg

+1

私は正直な質問を落胆させたくありませんが、皆さんが知っているようにあなたの質問を始めるには、C標準(特にC89とC99)にはあまり馴染みがないようです。 –

答えて

4

C89規格が必要です。現在のC99はそうしていない。とにかく、スイッチは/TPで、すべての入力ファイルをC++で扱い、/Tp<file>で扱うことができます。何も修正されないかもしれないが、新しいエラーが導入されることを覚えておいてください。傷つける。

最高の解決策は、GCCでCの部分をコンパイルすることです。

+1

VC ** 2010 **は依然としてC99を実装していないことは合理的にも衝撃的です。それはどういう根拠ですか? –

+1

@Kerrek MSVCは、Cの機能が選択されたC++コンパイラです。彼らはC99の完全な互換性のための "バグ"レポートまたは機能要求を持っていましたが、私は最初の文で述べた理由でそれを却下しました。 – RedX

+0

@RedX:興味深い。 Microsoft製の専用Cコンパイラはありませんか? –

2

設定/ TPでは、CファイルとしてC++ファイルおよび/ TCとして任意のファイルをコンパイルできます。 残念ながら、これはファイル単位の設定です。したがって、すべてのファイルに対してこれを設定する必要があります。 小さなスクリプトでこれを行い、.vcprojファイルを解析して/ TCを/ TPに置き換えることができます。

+0

ありがとうございます、それは何よりも優れています! –

3

VisualStudio 2010では、プロジェクトのプロパティに移動します。設定のプロパティに行く - > [C/C++ - >高度な

C++コード(/ TP)としてコンパイルし」選択 "としてコンパイル" について

これは、内のすべての.cファイルおよび.cppのファイルに適用するように見えます。プロジェクト。