• C语言中的定义与声明


    什么是定义?什么是声明?它们有何区别?

    举个例子:

    1
    2
    A)int i;
    B)extern int i;(关于extern,后面解释)


    哪个是定义?哪个是声明?或者都是定义或者都是声明?

    什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊。^_^),它们就同生共死,终生不离不弃。并且这块内存的位置也不能被改变。一个变量或对象在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义
    同一个变量或对象。


    什么是声明:有两重含义,如下:


    第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的。声明可以出现多次。

    第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名或对象名。比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声明最典型的例子就是函数参数的声明,例如:

    1
    void fun(int i, char c);


    好,这样一解释,我们可以很清楚的判断:A)是定义;B)是声明。


    那他们的区别也很清晰了。记住,定义声明最重要的区别:定义创建了对象并为这个extern 声明变量是在其他文件中声明(也可以看做是引用变量)。

     

    对象分配了内存,声明没有分配内存(一个抱伊人,一个喝稀粥。^_^)。

     

    参考链接:

    陈正冲老师讲c语言之声明和定义的区别:https://www.cnblogs.com/haore147/p/3647466.html



    声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。

    定义是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。

    无论如何,定义 操作是只能做一次的。如果你忘了定义一些你已经声明过的变量,或者在某些地方被引用到的变量,那么,连接器linker是不知道这些引用该连接到那块内存上的。然后就会报missing symbols 这样的错误。如果你定义变量超过一次,连接器是不知道把引用和哪块内存连接,然后就会报 duplicated symbols这样的错误了。

    另外结构定义也是一种类型定义
    类型定义本身相当于声明。



     

  • 相关阅读:
    2019年4月
    20190423
    20190419
    20190418
    20190417
    free命令详解(转载)
    https改造过程中的一个坑
    GitLab 实现代码自动部署(转载自https://segmentfault.com/a/1190000011561808)
    js和php写日历
    shell递归遍历目录的方法
  • 原文地址:https://www.cnblogs.com/grooovvve/p/9782312.html
Copyright © 2020-2023  润新知