2019独角兽企业重金招聘Python工程师标准>>>

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

extern int bar;extern int time(int, int);double plus(int, double); // 对于函数声明,extern关键字是可以省略的。

定义是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。与上面的声明相应的定义如下:

int bar;int time(int a, int b) {return a*b;
} double plus(int i, double d) {return i+d;} 

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

总结

如果只是为了给编译器提供引用标识,让编译器能够知道有这个引用,能用这个引用来引用某个实体(但没有为实体分配具体内存块的过程)是为声明。如果该操作能够为引用指定一块特定的内存,使得该引用能够在link阶段唯一正确地对应一块内存,这样的操作是为定义。

声明是为了让编译器正确处理对声明变量和函数的引用。定义是一个给变量分配内存的过程,或者是说明一个函数具体干什么用。

转载于:https://my.oschina.net/jlongtian/blog/818879

C语言中声明和定义的区别相关推荐

  1. c语言中声明外部函数需要添加的关键字,C语言中声明和定义的区别——分析extern关键词。...

    一直很迷惑C语言中的声明和定义的有些实践中的用法,说迷惑实践是因为声明和定义的概念上的区别是很明确的. 定义和声明的区别(主要针对变量): 定义是要为变量分配存储空间,还可以在定义的时候为变量指定初始 ...

  2. c语言中引用头使用什么指令,在源文件(.c)和头文件(.h)中声明和定义的区别——C语言...

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 声明和定义:有分配空间的叫定义,没分配空间的叫声明 定义:表示 ...

  3. C\C++中声明与定义的区别

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  4. c++中声明和定义的区别(这个兄弟写的解决了我的疑惑)

    前言:网上有些关于C/C++中函数和定义之间的没有描述的很清晰,这里总结一番: 声明和定义在作用于变量和函数中是有区别的:这也是网上一些说话有分歧的地方: 1.声明和定义变量时:         要区 ...

  5. C语言中声明和定义详解

    变量声明和变量定义 变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义. 变量声明:用于向程序表明变量的类型和名字. 定义也是声明,extern声明不是定义 定义也是 ...

  6. C语言 变量声明和定义的区别

    变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中 ...

  7. C语音中声明与定义的区别

    https://jingyan.baidu.com/article/020278118e51e01bcd9ce576.html

  8. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  9. C语言 函数声明和定义 - C语言零基础入门教程

    目录 一.简介 二.函数返回值 1.函数没有返回值 2.函数有返回值 三.函数参数 1.函数没有参数 2.函数有固定参数 3.函数有不定长度参数 四.函数声明和定义 1.函数声明:不需要实现这个函数的 ...

最新文章

  1. 九、中缀表达式转为后缀表达式
  2. python列表按值排序_json的python排序列表(按值)
  3. 除了 Python ,这些语言写的机器学习项目也很牛(二)
  4. 如何改变Static Text控件中文字的字体,字体大小及颜色。
  5. c/c++线性循环队列
  6. 美团云的网络架构演进之路
  7. CodeIgniter的缓存小记
  8. iOS进阶面试题----Block部分
  9. 如何在 Excel 中计算 NPS
  10. 打卡小程序源码,微信小程序源码下载
  11. 99%的人都能看懂的MQ补偿机制
  12. word插入页码后只有当前页有页码
  13. matlab(slove)如何应用,README.md/matlab/slove at master · SeanXP/README.md · GitHub
  14. 【蓝桥备赛冲刺】2022年第十三届省赛模拟题题解C/C++
  15. [Unity3D]Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示
  16. XBee zigbee 使用指南--- XBee模块输入和输出
  17. Linux命令之dos2unix
  18. 如何绕过图片格式限制上传木马获取WebShell
  19. hiho一下 第139周 买零食 动态规划
  20. 抗衰老产品nmn,nmn纯度越高越好吗,揭秘nmn的老底

热门文章

  1. ITK:提取二进制图像中斑点的内部和外部边界
  2. VTK:Utilities之FileOutputWindow
  3. VTK:Rendering之OutlineGlowPass
  4. OpenGL perpixelgloss逐像素光泽度的实例
  5. OpenGL 漫反射辐照度 Diffuse irradiance
  6. c++访问控制说明符
  7. QT的QVectorIterator类的使用
  8. 神奇的机器人评课_《聪明的机器人》教学反思
  9. qaxobject控制word到某一行_Word操作技巧:快速选择文本的4种技能,提高你的工作效率...
  10. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式