zoukankan      html  css  js  c++  java
  • C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?

    报错信息:error C2065: 'salary' : undeclared identifier

    #include <stdio.h>
    
    void main(){
    printf("我的成绩是100分!");//不使用变量
    int salary;//使用变量
    salary = 100;
    printf("我的成绩是%d分!",salary);
    return 0;
    }
    

    问题根源:编译器问题——C89和C99

    C89规定,在任何执行语句之前,在块的开头声明所有局部变量。

    在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。

    变量声明放在前面就不报错了······

    #include <stdio.h>
    
    void main(){
    int salary;//使用变量
    salary = 100;
    printf("我的成绩是100分!");//不使用变量
    printf("我的成绩是%d分!",salary);
    return 0;
    }

    不同风格利弊

    变量在函数开头定义:便于修改

    变量就近定义:便于阅读

    变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。

    要达到最大的兼容跨平台性,还是放在函数开头定义吧

    使用哪种方式,看实际情况+个人喜好!

    我个人是比较喜欢就近定义的,觉得比较方便一点。

    可是,现在使用的VC6.0,编译器可能是C89的,所以不得不用开头定义。

    顺便提一提:该文件的后缀名为.c

    在网上查了一下,有许多说法,列举一二(意思大同小异)

    1.源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。

    2.在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。

    然而,把后缀名改为.cpp后,还是报错

    void main()改为int main(void)就可以了

    #include <stdio.h>
    
    int main(void ){
    int salary;//使用变量
    salary = 100;
    printf("我的成绩是100分!");//不使用变量
    printf("我的成绩是%d分!",salary);
    return 0;
    }
    

    应该是语言的数据类型的问题吧???是不是呢?大神何处在~

    (完,可待续)

  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/web-HCJ/p/4468689.html
Copyright © 2011-2022 走看看