1

我对 C++ 有很好的体验,现在我正在尝试用纯 C 做一些事情。但我注意到一个非常奇怪的事实。

以下代码:

#include <stdio.h>

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

    double b;
    b = a + 1;

    printf("%lf", b);

    return 0;
}

在 sourceLair 中编译 OK(据我所知,使用 gcc 编译器),但在 Microsoft Visual Studio(使用 Visual 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

我对代码进行了一些试验,发现在调用任何函数之前放置一个变量声明是可以的,但是在它之后放置一个声明会导致编译错误。

那么有什么问题呢?我使用全新安装的 Microsoft Visual Studio 2012 Express,没有更改任何设置。

4

1 回答 1

4

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

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

于 2013-09-27T19:01:16.703 回答