首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

Stack Overflow用户

发布于 2010-01-14 06:51:25

在C99之前的C中,给定作用域中的所有变量都必须在该作用域中的其他语句之前定义。虽然它最初看起来是一样的,但这与GMan的答案并不完全相同。特别是,函数可以包含定义其他作用域的其他块,这些块可以在外部块中的可执行语句之后定义变量:

代码语言:javascript
运行
复制
int main() { 
    int x;

    printf("whatever");
    int y; // not allowed

    { 
         int z;    // allowed
    }
    return 0;
}

虽然像这样定义一个块(与if语句或While循环等任何流控制无关)是相当不常见的,但它可以作为C语言的一部分。

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

https://stackoverflow.com/questions/2060855

复制
相关文章

相似问题

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