首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Visual Studio 2008中出现奇怪的编译错误

Visual Studio 2008中出现奇怪的编译错误
EN

Stack Overflow用户
提问于 2010-01-14 06:43:34
回答 7查看 735关注 0票数 3

我在编译以下代码时遇到了问题:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <limits.h>
int main () {
    printf("short: [%d,%d]\n",SHRT_MIN,SHRT_MAX);
    printf("int: [%d, %d]\n",INT_MIN, INT_MAX);
    printf("long: [%d, %d]\n",LONG_MIN,LONG_MAX);
    int aa=017;
    printf("%d\n",aa);
    return 0;
}

错误消息为:

代码语言:javascript
运行
复制
1>c:\tic\ex1\ex2\ex2.c(12) : error C2143: syntax error : missing ';' before 'type'
1>c:\tic\ex1\ex2\ex2.c(13) : error C2065: 'aa' : undeclared identifier

但是,对此进行编译就可以了:

代码语言:javascript
运行
复制
    #include <stdio.h>
    #include <limits.h>
    int main () {
        int aa=017;
        printf("short: [%d,%d]\n",SHRT_MIN,SHRT_MAX);
        printf("int: [%d, %d]\n",INT_MIN, INT_MAX);
        printf("long: [%d, %d]\n",LONG_MIN,LONG_MAX);
        printf("%d\n",aa);
        return 0;
    }

知道问题出在哪里吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-14 06:45:43

在C中,在执行任何代码之前,必须在作用域的顶部声明变量。但在C99中情况并非如此( Visual Studio没有实现这种情况)。

票数 10
EN

Stack Overflow用户

发布于 2010-01-14 06:47:00

Visual Studio不支持C99,因此块中的所有声明(如示例中的aa )必须出现在任何语句(如printf调用)之前。

票数 3
EN

Stack Overflow用户

发布于 2010-01-14 06:47:12

在(旧的) C中,您不能像在C++或最新的C标准中那样在任何地方声明变量。你必须在一个作用域的大括号后面直接声明它,就像你的第二个例子一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2060855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档