当前位置: 首页 > news >正文

定义和声明的区别和联系

一、定义的概述
  1.  变量的定义用于为变量分配存储空间,还可以为变量指定初始值。 (在一个程序中,变量有且仅有一个定义。)

  2. 声明用于向程序表明变量的类型和名字。(程序中变量可以声明多次。)

  3. 定义也是声明 —— 当定义变量的同时,我们也就声明了它的类型和名字。

 

二、extern关键字

  1. extern 声明变量而不定义它,也分配存储空间。(事实上,它只是说明变量定义在程序的其他地方。)

  2. 不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern:
      extern int i;  // declares but does not define i
      int i;      //  declares and defines i

  3. 只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。

  4. 如果声明有初始化式,那么即使声明标记为 extern,它仍然被当作是定义:
    extern double pi = 3.1416;  // 虽然使用了 extern ,但是这条语句还是定义了 pi,分配并初始化了存储空间。

  (PS:只有当 extern 声明位于函数外部时,才可以含有初始化式。)


    因为已初始化的 extern 声明被当作是定义,所以该变量任何随后的定义都是错误的。
    extern double pi = 3.1416;  // definition
    double pi;           // error: redefinition of pi


    同样,随后的含有初始化式的 extern 声明也是错误的:
    extern double pi = 3.1416;   // definition
    extern double pi;        // ok: declaration not definition
    extern double pi = 3.1416;   // error: redefinition of pi

转载于:https://www.cnblogs.com/yshl-dragon/archive/2013/03/11/2954357.html

相关文章:

  • 沈向洋博士致2018届毕业生的公开信:计算机科学的三堂人生课
  • vuex从安装到使用的教程
  • ZOJ-2770 Burn the Linked Camp 差分约束
  • 中国AI专利增长领先美国!拼专利这条路能不能走通?
  • [书目20130316]jQuery UI开发指南
  • K8s创建pod yaml文件详解
  • Sql Server系列:开发存储过程
  • 学Java的能从事前端吗?
  • Find INTCOL#=1001 in col_usage$?
  • 比特币的矿工为什么讨厌开发组Core?
  • 有哪些功能是DBMS_STATS无法实现而Analyze命令可以做到的?
  • Kafka 1.1新功能:数据的路径间迁移
  • Toast 学习
  • AutoCAD 命令统计魔幻球的实现过程--(3)
  • SeimiCrawler 2.0版本变动介绍
  • ES6指北【2】—— 箭头函数
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • CentOS6 编译安装 redis-3.2.3
  • echarts的各种常用效果展示
  • ES学习笔记(12)--Symbol
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • js操作时间(持续更新)
  • Less 日常用法
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring Boot快速入门(一):Hello Spring Boot
  • zookeeper系列(七)实战分布式命名服务
  • 从PHP迁移至Golang - 基础篇
  • 从setTimeout-setInterval看JS线程
  • 从tcpdump抓包看TCP/IP协议
  • 计算机常识 - 收藏集 - 掘金
  • 简单易用的leetcode开发测试工具(npm)
  • 普通函数和构造函数的区别
  • 悄悄地说一个bug
  • 一个JAVA程序员成长之路分享
  • 移动端唤起键盘时取消position:fixed定位
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #《AI中文版》V3 第 1 章 概述
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #Z2294. 打印树的直径
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (9)目标检测_SSD的原理
  • (ZT)出版业改革:该死的死,该生的生
  • (ZT)一个美国文科博士的YardLife
  • (二)正点原子I.MX6ULL u-boot移植
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (四) Graphivz 颜色选择
  • (转)socket Aio demo
  • (转)菜鸟学数据库(三)——存储过程
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 回调、接口回调、 委托
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池