Can';t在函数调用后定义变量 我有一个很棒的C++经验,现在我想在纯C中做一些事情,但是我注意到一个非常奇怪的事实。

Can';t在函数调用后定义变量 我有一个很棒的C++经验,现在我想在纯C中做一些事情,但是我注意到一个非常奇怪的事实。,c,visual-c++,visual-studio-2012,C,Visual C++,Visual Studio 2012,以下代码: #include <stdio.h> int main() { double a; scanf_s("%lf", &a); double b; b = a + 1; printf("%lf", b); return 0; } 我对代码进行了一些实验,并注意到在调用任何函数之前放置一个变量声明是可以的,但在它之后放置一个声明会导致编译错误 那怎么了?我使用的是全新安装的Microsoft Visual Stu

以下代码:

#include <stdio.h>

int main()
{
    double a;
    scanf_s("%lf", &a);

    double b;
    b = a + 1;

    printf("%lf", b);

    return 0;
}
我对代码进行了一些实验,并注意到在调用任何函数之前放置一个变量声明是可以的,但在它之后放置一个声明会导致编译错误


那怎么了?我使用的是全新安装的Microsoft Visual Studio 2012 Express,没有更改任何设置。

假设这是以C语言编译的,我有个坏消息告诉您:Visual Studio附带的Microsoft编译器不支持C99,只支持C89,在该语言版本中,只能在作用域的开头声明变量。非声明语句后的声明是错误的


因此,要么重写代码,使其符合C89,要么使用支持C99的编译器(如GCC,可在安装MinGW后使用,或clang,后者仅具有与VS集成的实验支持)。

假设此编译器编译为C,我有个坏消息要告诉你:Visual Studio附带的Microsoft编译器不支持C99,只支持C89,在该语言版本中,只能在作用域的开头声明变量。非声明语句后的声明是错误的


因此,要么重写代码,使其符合C89,要么使用支持C99的编译器(如GCC,可以在安装MinGW后使用,或者clang,它只提供与VS集成的实验性支持)。

还请注意clang具有实验性Visual Studio集成-您可以从;其他替代方案是使用自己的IDE或英特尔编译器,我相信这是与Visual Studio集成在一起的well@Christoph我不知道,谢谢。我现在已经把它包括在我的答案中了。还要注意,clang具有实验性的Visual Studio集成—您可以从中获得二进制版本;其他替代方案是使用自己的IDE或英特尔编译器,我相信这是与Visual Studio集成在一起的well@Christoph我不知道,谢谢。我现在把它包含在我的答案中。把文件从<代码> > CPP<代码> >代码> >代码> > Ajay.……它是C++,但是我需要纯C。所以,你需要改变代码。C不允许在语句后声明变量。块中的所有变量必须首先出现在任何语句之前!将文件从代码> >代码> >代码> > Ajay.……,它将是C++,但是我需要纯C。所以,你需要改变代码。C不允许在语句后声明变量。块中的所有变量必须首先出现在任何语句之前!
1>Task 1.c(8): error C2143: syntax error : missing ';' before 'type'
1>Task 1.c(9): error C2065: b: undeclared identifier
1>Task 1.c(9): warning C4244: =: conversion from 'double' to 'int', possible loss of data
1>Task 1.c(11): error C2065: b: undeclared identifier