17

GNUARMコンパイラでコンパイルするコードがありますが、VisualStudio2010でエラーが発生します。この問題には、C言語ファイルの最初のステートメントの後に変数を宣言することが含まれます。

main.c

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int i = 6;
  i = i + 1;
  printf("Value of i is: %d\n", i);
  int j = i * 10; // <-- This is what Visual Studio 2010 complains about.
  printf("Value of j is: %d\n", j);
  return EXIT_SUCCESS;
}

次のコードはエラーなしでコンパイルされます。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int i = 6;
  int j;      // <-- Declaration is now here, valid according to K&R rules.
  i = i + 1;
  printf("Value of i is: %d\n", i);
  j = i * 10; // <-- Moved declaration of j to above.
  printf("Value of j is: %d\n", j);
  return EXIT_SUCCESS;
}

Win32コンソールプロジェクトの作成にデフォルト設定を使用しています。「Compileas」プロパティを「CompileasC++(/ TP)」に設定すると、一部のVisualStudioヘッダーファイルでコンパイルエラーが発生します。(プロジェクトを右クリックし、[プロパティ] → [構成プロパティ] → [ C / C ++ ] → [詳細設定]を選択します)。

Visual Studio 2010に、C ++や現在のC言語標準など、最初のステートメントの後に変数宣言を許可するように指示するにはどうすればよいですか?

4

3 に答える 3

9

あなたはそうしない。VisualC++はC99をサポートしていません。

C ++としてコンパイルする(そしてそれに応じてコードを更新する)か、C89のルールに従う必要があります。

(コンパイル時にどのようなエラーが発生するかわかりません。追加すれば/TP、サンプルを正常にコンパイルできます。詳細を提供していただければ、私または他の誰かがお手伝いできるかもしれません。)/TP#include <stdlib.h>EXIT_SUCCESS

于 2011-09-30T18:20:04.210 に答える
6

Visual Studio 2013の時点で、VisualC++コンパイラはC99スタイルの変数宣言をサポートしています。詳細については、以下をご覧ください。

http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx

于 2014-08-14T22:54:24.840 に答える
2

Cファイルとスイッチを使用してデフォルトのVisualStudio2010プロジェクトで同じテストを行った/TPところ、プリコンパイル済みヘッダーエラーが発生しました。プロジェクト全体または特定のCファイルの名前を変更stdafx.cppするか、プリコンパイル済みヘッダーを無効にすることで削除できます。stdafx.c

他に問題は見つかりませんでした。しかし、これは効果的にC言語をC ++に変換しますが、これはあなたの意図ではないと思います。ただし、Cを使用すると、すべての{}ブロックの先頭に変数を定義できます。

于 2011-09-30T18:36:36.850 に答える