声明v.s.定义

参考:http://t.csdnimg.cn/1xnzA

  1. 变量的定义:用于为变量分配存储空间,还可以为变量指定初始值,在程序中,变量有且仅有一个定义。
  2. 变量的声明:用于向程序表明变量的类型和名字。在程序中,变量可以声明多次。
  3. 定义也是声明:当定义变量的时候我们声明了它的类型和名字。
  4. 不定义变量的声明:通过使用关键字extern声明变量名而不定义它。“extern+对象类型+对象名”
    1. extern声明 不会为变量分配存储空间,只是说明变量定义在程序的其他地方。
  5. 有初始化式的声明必是定义
    1. 初始化式:int a = 10;
    2. 因为初始化式必须要有存储空间来进行初始化。
    3. 只有当声明也是定义时,声明才可以有初始化式,因为只有定义才会分配存储空间。
    4. 如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。extern int a = 10;但是只有当extern声明位于函数外部时,才可以被初始化。当初始化位于函数内部的extern声明时,编译器报错。
  6. 函数的声明和定义:带有{ }的就是定义,否则就是声明。
    1. extern double max(double d1,double d2); //声明
  7. 任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。
  8. 模块化要点:
    1. 模块即是一个.c文件和一个.h文件的结合,头文件.h中是对于该模块接口的声明。
    2. 某模块提供给其他模块调用的外部函数以及数据需要在.h文件中冠以extern关键字声明。可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。
    3. 模块内的函数和全局变量需要在.c文件开头冠以static关键字声明;尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。
    4. 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。
    5. 例外:以下三种实体的定义也可放到头文件中:
      1. 值在编译时就已知的const 变量的定义可以放到头文件中,如:const int num(10);
      2. inline 函数
      3. 类的定义可以放到头文件中
//如果声明有初始化式,它就被当作定义,即使它有extern
//只有extern声明位于在函数外面时,才可以被初始化。
//C语言中定义的变量默认就是extern的,因此 extern int a = 10; 等价于 int a = 10;
extern int a = 10;	// 定义a为外部的整型变量int main(void)
{extern int a;	//声明一个外部extern的整型变量//  这是个声明而不是定义,声明a是一个已经定义了的外部变量//  注意:声明外部变量时可以把变量类型去掉如:extern a;int b;                  //  定义一个变量, 不初始化int c = 10;             //  定义一个变量, 同时进行初始化extern int d = 10;		//这个定义很明显被gcc编译器认为是错误的。//'d' has both 'extern' and initializerreturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP SD学习笔记06 - 受注的据否,受注的理由,简易变更(一括处理)

上文讲了一括处理和Block(冻结)处理。 SAP SD学习笔记05 - SD中的一括处理(集中处理),出荷和请求的冻结(替代实现承认功能)-CSDN博客 本章继续讲SAP的流程中一些常用的操作。 1,受注…

Flume 入门教程

内容目录 Flume 简介 架构和基本概念 多种架构模式 Flume 安装部署 Flume 简介 Flume 是一个分布式、可靠且高可用的数据收集、聚合和传输系统,主要用于高效地处理大规模日志数据。设计之初,它主要服务于日志管理领域,但其灵活性和可扩展…

语言的未来:深度学习在自然语言处理中的革命

语言的未来:深度学习在自然语言处理中的革命 1 引言 自古以来,语言就是人类表达思想、传递信息、进行社会互动的基石。语言的复杂性既体现在其变化多端的语义、句法和语用层面,同时也反映在人类如何理解和产生自然语言的深奥之中。在这一节中…

009、Python+fastapi,第一个后台管理项目走向第9步:ubutun 20.04下安装vscode+git环境配置

一、说明 git是一定要配置的,由于是白嫖的无影云电脑,东西得保存在网上,就继续白嫖gitee吧,显然国内github是不太合适的了 二、安装git 直接安装sudo apt install -y git git --version git version 2.25.1 三、配置git 在git上…

OSPF星型拓扑和MGRE全连改

一,拓扑 二,要求 1,R6为ISP只能配置IP地址,R1-R5的环回为私有网段 2,R1/4/5为全连的MGRE结构,R1/2/3为星型的拓扑结构, 3,R1为中心站点所有私有网段可以互相通讯,私有网段…

Spring AI,调用OpenAI大模型接口,让ChatGPT给你讲笑话

前言 Spring最近刚刚推出了SpringAI,封装了AI大模型接口的使用。本文将参考Spring官网案例,一步步教你如何调用OpenAI的接口,让ChatGPT接口返回一个笑话。 前提条件 请下载并安装好JDK17或更新的版本,本文使用的是JDK21。JDK下…

基于百度文心大模型全面重构,小度正式推出AI原生操作系统DuerOS X

4月16日,以“创造未来”为主题的2024百度Create AI开发者大会在深圳举办。百度集团副总裁、小度科技CEO李莹正式发布了小度新一代操作系统DuerOS X,该操作系统是小度基于百度文心大模型推出的全球首个AI原生操作系统。李莹表示:“作为⽂⼼⼤模…

【漏洞复现】IP-guard WebServer getdatarecord接口处存在权限绕过漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

基于Java+Vue的校园交友系统(源码+文档+包运行)

一.系统概述 选题背景: 在大学校园中,学生们面临着新的环境和人际关系的挑战。有些学生可能感到孤独或者希望扩展自己的社交圈子,寻找志同道合的朋友或者潜在的伴侣。因此,设计一款校园交友平台具有重要意义。 研究意义&#xff1…

Java内存模型和 JVM 内存运行时

文章目录 前言一、什么是Java 的内存模型?二、什么是 JVM 的运行时数据区Java8 之前和之后的区别JVM 内存模型JVM 内存区域JVM 内存垃圾回收JVM如何判断哪些对象不在存活?JVM运行过程中如何判断哪些对象是垃圾? JVM 垃圾回收Java8 中的 jvm如…

Google DeepMind: Many-Shot vs. Few-Shot

本文介绍了如何通过增大上下文窗口,利用大型语言模型(LLMs)进行多实例上下文学习(Many-Shot In-Context Learning,ICL)的方法。主要描述了现有的几实例上下文学习方法虽然在推理时能够通过少量例子学习&…

“全网最全”LLM推理框架集结营 | 看似微不足道,却决定着AIGC项目的成本、效率与性能!

00-前序 随着ChatGPT、GPT-4等大语言模型的出现,彻底点燃了国内外的学者们与企业家们研发LLM的热情。国内外的大语言模型如雨后春笋一般的出现,这些大语言模型有一部分是开源的,有一部分是闭源的。 伴随着大语言模型的出现,国内外…

树莓派驱动RGB灯-rpi-ws281x库安装

1 树莓派的操作系统安装 1.1 操作系统选择 这个选择64位的操作的系统来驱动,一定不要选择32位的操作系统。笔者在这个地方浪费不少时间,具体原因不是很清楚。如果32位的操作系统,后面在rpi-ws281x的库时候会有报错。 1.2 操作系统链接如下…

windows docker desktop==spark环境搭建

编写文件docker-compose.yml version: 3services:spark-master:image: bde2020/spark-master:3.1.1-hadoop3.2container_name: spark-masterports:- "8080:8080"- "7077:7077"- "2220:22"volumes:- F:\spark-data\m1:/dataenvironment:- INIT_D…

Spring学习(三)——AOP

AOP是在不改原有代码的前提下对其进行增强 AOP(Aspect Oriented Programming)面向切面编程,在不惊动原始设计的基础上为其进行功能增强,前面咱们有技术就可以实现这样的功能即代理模式。Java设计模式——代理模式-CSDN博客 基础概念 连接点&#xff08…

2024经常用且免费的10个网盘对比,看看哪个比较好用!

网盘在我们的工作和学习中经常会用到,也是存储资料的必备工具,有了它,我们就不用走到哪都带着移动硬盘了,而目前市场上的主流网盘还有数十款,其中有免费的也有付费的,各家不一,今天小编就来为您…

[Android]模拟器登录Google Play失败

问题: 模拟器登录Google Play失败,提示couldnt sign in there was a problem communicating with google servers. try again later. 原因: 原因是模拟器没有连接到互联网,打开模拟器中Google浏览器进行搜索一样不行。 解决&am…

移动硬盘(PSSD)中文件占用空间远大于文件大小

定义 文件的大小:文件内容实际具有的字节数,它以Byte为衡量单位,只要文件内容和格式不发生变化,文件大小就不会发生变化。 文件占用空间:文件在磁盘上的所占空间,它最小的计量单位是“簇(Cluster)”。 为…

MySQL高负载排查方法最佳实践(15/16)

高负载排查方法 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。 # mpstat 是一款 CPU 性能指标实时展示工具 # 能展示每个 CPU 核的资源视情况,同时还能将资源使用情况进行汇总展示 # 如果CPU0 的 %idle 已经为 0 ,说明此核已经非常繁忙# 打印所…

Istio介绍

1.什么是Istio Istio是一个开源的服务网格(Service Mesh)框架,它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括: 服务治理:Istio能够帮助管理服务之间的…