我真正简单的C程序无法编译。任何的想法?

时间:2012-08-20 23:31:19

标签: c visual-studio-2010

这是我无辜的计划

int main(int argc, char* argv[])
{
    if(argc < 3)
    {
        printf("Sorry");
        return 0;
    }

    char key[]= "45WPbZNljDN6CUCUU6ga";
    FILE* inpFile = fopen(argv[1],"r");
    FILE* outFile = fopen(argv[2],"w");
    if(!inpFile || !outFile)
    {
        printf("oops");
        return 0;
    }

    enc(inpFile,outFile,key);
    fclose(inpFile);
    fclose(outFile);
}

enc()在别处定义,但这不是问题。当我尝试使用VS2010命令提示符编译时,一切都变得狂暴。但是,当我删除参数检查块时,它编译得很好。

int main(int argc, char* argv[])
{
    char key[]= "45WPbZNljDN6CUCUU6ga";
    FILE* inpFile = fopen(argv[1],"r");
    FILE* outFile = fopen(argv[2],"w");
    if(!inpFile || !outFile)
    {
        printf("oops");
        return 0;
    }

    enc(inpFile,outFile,key);
    fclose(inpFile);
    fclose(outFile);
}

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

如果它被编译为C程序(带VS2010的.c扩展名),则在可执行语句之后声明变量是无效的。您需要将声明(keyinpFileoutFile)全部移到main的前面(在第一个if声明之前)

答案 1 :(得分:3)

Microsoft C编译器遵循C语言的旧标准,其中变量声明必须在任何其他语句之前完成(严格C89)。第二次编译的原因是因为变量是先声明的。我建议声明你的变量(不进行初始化),然后进行检查,最后初始化你的2个文件指针。