·变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。

·变量声明:用于向程序表明变量的类型和名字。

·定义也是声明:当定义变量时我们声明了它的类型和名字。

·extern关键字:通过使用extern关键字声明变量名而不定义它。

1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。

1 extern int i; //声明,不是定义
2 int i; //声明,也是定义 

2.如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化。

1 extern double pi=3.1416;  //定义

3.函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明

1 extern double max(double d1,double d2);  //声明,此时extern可去掉

程序设计风格:

1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。

2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。

3. 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。

总结:

1.变量在使用前就要被定义或者声明。

2.在一个程序中,变量只能定义一次,却可以声明多次。

3.定义分配存储空间,而声明不会。

注:有三个例外,以下三种实体的定义也可放到头文件中。

1.值在编译时就已知的const 变量的定义可以放到头文件中

1 const int num = 10;

2.类的定义可以放到头文件中

3.inline 函数

这三个实体可以定义在多个源文件中,只要在每个源文件中的定义相同。

[C/C++] C++声明和定义的区别相关推荐

  1. 每日一题(16)—— 声明和定义的区别

    简述变量/函数声明和定义的区别: 声明:不分配内存空间: 定义:分配内存空间.

  2. C语言中,声明和定义的区别

    目录 一.声明和定义的区别 什么是定义 什么是声明 区别 二.针对变量时 三.针对函数时 四.参考 一.声明和定义的区别 什么是定义 定义就是创建一个对象,给它分配内存并取名字(变量名或对象名),还可 ...

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

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

  4. 变量声明和定义的区别

    转自:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候 ...

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

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

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

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

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

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

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

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

  9. C语言中声明和定义的区别

    2019独角兽企业重金招聘Python工程师标准>>> 声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等.声明,用于编译器(co ...

最新文章

  1. php webserver documentroot,PHP $_SERVER['DOCUMENT_ROOT'] 问题
  2. monit 内存 监控_如何借助Monit搭建服务器监控系统?(1)
  3. Spring容器初始化和bean创建过程
  4. 5.非关系型数据库(Nosql)之mongodb:创建集合,备份与导入导出, 数据还原,导入导出
  5. 优化JS代码的34种方法(上)
  6. web.xml配置文件详解
  7. python内置函数map/reduce/filter
  8. python爬虫源代码_【Python每日一问】Python爬虫能做什么?
  9. 第一步_安装VMware虚拟机和搭载ubuntu系统
  10. Android Studio 0.1 gradle home的问题
  11. 用友u8怎么导出凭证_用友U8V10.1ERP怎么生成期间损益结转凭证的图文操作教程
  12. vscode创建工作区及生成html模板
  13. 抖音音频提取php,php抖音背景音乐解析下载API接口
  14. python进行主成分分析_python 主成分分析
  15. 公众号七种有效的引流方式
  16. 分布式id生成器:彻底解决雪花算法时间回拨问题
  17. 健康地奋斗着——程序员自己的养生书
  18. GPS从入门到放弃(六) --- 开普勒轨道参数
  19. linux 查看war包内容,linux解压war包(示例代码)
  20. 君澜再入宁波,投资管理君澜度假系列酒店已经超过100家

热门文章

  1. boost::mp11::mp_intersperse相关用法的测试程序
  2. boost::log::make_exception_handler用法的测试程序
  3. boost::hana::overload_linearly用法的测试程序
  4. boost::gil::extend_boundary用法的测试程序
  5. boost::describe模块实现打印功能的测试程序
  6. boost::core::is_same用法测试实例
  7. boost::callable_traits的remove_varargs_t的测试程序
  8. VTK:PolyData之PointSource
  9. OpenCV视差图后过滤
  10. OpenGL创建hello Window窗口