zoukankan      html  css  js  c++  java
  • 关于C语言变量声明在其他语句后的一些细节

    今天一个同学来找我,说他的代码老是编译不通过,我看了半天,好像都很符合逻辑,但一直显示一个变量未定义,我就纳闷了,代码类似如下:

    1 int main(){
    2     login();
    3     int id;
    4     scanf("%d", &id);
    5     ....
    6 }

    他用的是VC6,编译器一直提示变量"id"未定义,做了一些猜测性调试,仍是错误,我就凭着感觉把login;和int id;互换了个行,发现成功编译,然后他就走了,留下我一个人回想着原来错误的代码在电脑前凌乱,于是就有了下面的发现。

    给出如下C代码:

    1 int main(){
    2     int a;
    3     printf("%d
    ", a);
    4     int b;
    5     printf("%d,%d
    ", a ,b);
    6 
    7     return 1;
    8 }

    在VC6模式下,第 5 行会报错:error C2065: 'b' : undeclared identifier。

    结论:这是一个早期的C语言规定,在VC6(即C90标准)下,每个块级作用域中的所有变量的声明必须放在最前面,一旦执行任何其他非声明语句之后,后续的任何声明都将错误。C99之后,此标准被改变,允许在任何需要变量的时候进行声明。

  • 相关阅读:
    guxh的python笔记一:数据类型
    guxh的python笔记三:装饰器
    guxh的python笔记十:包和模块
    guxh的python笔记六:类的属性
    guxh的python笔记四:迭代
    流畅的python笔记
    spring面试大全
    Spring面试问答
    Hibernate的10个常见面试问题及答案
    reflect 机制
  • 原文地址:https://www.cnblogs.com/ryzz/p/9283751.html
Copyright © 2011-2022 走看看