1

cl.exe (64 ビット コマンド ライン) を使用して VS2010 Professional で C プログラムをコンパイルしようとしています。VS2010 または VS2008 で奇妙なエラーが発生します。同じコードは、GNU gcc で問題なくコンパイルおよび実行されます (Cygwin)。何か案は?ここの問題を理解するまで、これ以上本物を扱うことはできません。ありがとう!

ファイル名: testC.c

cl.exe testC.c

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

typedef double Td;

int main(int argc, char *argv[])
  {
      FILE *fp;
      if ( (fp=fopen("junk_out.txt","w")) == NULL ){
                printf("Cannot open file.\n");
                exit(1);
      }
      fprintf(fp,"%f \n",3.1420);
      fclose(fp);
      Td x=3.14;
      Td *a;
      a = &x;
      printf("%f \n",a);
      printf("%f \n",x);
      printf("%f \n",*a);

      return 0;
   }

出力は次のとおりです。

      testC.c(18): error C2275: 'Td' : illegal use of this type as an expression
      testC.c(5) : see declaration of 'Td'
      testC.c(18): error C2146: syntax error : missing ';' before identifier 'x'
      testC.c(18): error C2065: 'x' : undeclared identifier
      testC.c(18): warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
      testC.c(19): error C2275: 'Td' : illegal use of this type as an expression
      testC.c(5) : see declaration of 'Td'
      testC.c(19): error C2065: 'a' : undeclared identifier
      testC.c(21): error C2065: 'a' : undeclared identifier
      testC.c(21): error C2065: 'x' : undeclared identifier
      testC.c(21): warning C4047: '=' : 'int' differs in levels of indirection from 'int *'
      testC.c(22): error C2065: 'a' : undeclared identifier
      testC.c(23): error C2065: 'x' : undeclared identifier
      testC.c(24): error C2065: 'a' : undeclared identifier
      testC.c(24): error C2100: illegal indirection
4

1 に答える 1

1

VS2010 の C コンパイラでコードをコンパイルする場合は、関数の先頭ですべての変数を定義する必要があります。

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

typedef double Td;

int main(int argc, char *argv[])
{
    FILE *fp;
    Td x;
    Td *a;
    if ( (fp=fopen("junk_out.txt","w")) == NULL )
    {
            printf("Cannot open file.\n");
            exit(1);
    }
    fprintf(fp,"%f \n",3.1420);
    fclose(fp);
    x=3.14;
    a = &x;
    printf("%f \n",a);
    printf("%f \n",x);
    printf("%f \n",*a);

    return 0;
}

C++ では、好きな場所で定義できます。

于 2012-09-29T21:16:12.733 に答える