声明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,一经查实,立即删除!

相关文章

React参数传递问题

问题描述 <div className"reply-list">{/* 评论项 */}{list.map((item) > {console.log("map 里面的item", item);return <CommentItem item{item} />; // 调用组件并传递参数item})}</div> // 在组件中使用形参 function CommentI…

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

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

Flume 入门教程

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

Docker中Kafka容器创建/更新Topic支持多分区

前提 自行通过docker部署好kafka&#xff0c;并启动相关容器。 假设Topic为http_capture。 #docker-kafka kafka_dir/opt/docker/kafka/build sudo rm -rf ${kafka_dir}/* cat > ${kafka_dir}/docker-compose.yml <<EOF version: "3.3" services:zookeepe…

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

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

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

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

OSPF星型拓扑和MGRE全连改

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

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

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

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

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

Gradle常用命令

Gradle是一个强大的构建系统&#xff0c;用于自动化和管理构建过程&#xff0c;是许多Java、Android、C和其他语言的项目的主流构建工具。以下是一些在命令行中经常使用的Gradle命令&#xff1a; 查看Gradle版本&#xff1a; gradle --version或使用Gradle Wrapper&#xff1a;…

深入理解人工智能:从基础到前沿/厾罗

导言&#xff1a; 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个家喻户晓的概念。无论是在电影中看到的智能机器人&#xff0c;还是我们日常生活中的智能助手&#xff0c;人工智能的应用已经无处不在。但人工智能究竟是什么&#xff1f;它如…

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

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

JC/T 2221-2014 木塑门检测

木塑门是指采用木粉&#xff0c;树脂以及助剂通过模塑化工艺制造而成&#xff0c;具有高强度&#xff0c;防火阻燃&#xff0c;耐水&#xff0c;防霉&#xff0c;抗菌等特点&#xff0c;是代替传统木材的绿色环保新型材料&#xff0c;在建筑领域广泛应用。 JC/T 2221-2014木塑…

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

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

手机矩阵操作都能做什么

手机矩阵操作在多个方面都有广泛的应用。首先&#xff0c;在内容传播方面&#xff0c;矩阵操作意味着在多个平台或账号上同时发布相同或相似的内容&#xff0c;以实现更广泛的覆盖和更高的曝光率。这有助于提升内容的影响力和知名度&#xff0c;从而吸引更多的用户关注。 其次…

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

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

Liquibase中MARK_RAN与EXECUTED:解析与实战应用.

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 引言 在软件开发的世界里&#xff0c;数据库的版本控制是一项重要的工作。Liquibase是一个开源的、企业级的数据库版本控制工具&#xff0c;它能够帮助更好地管理和控制数据库的版本。在这篇文章中&#xff0c;将深…

机器学习实战-决策树

1.概念 决策树(Decision Tree&#xff09;是在已知各种情况发生概率的基础上&#xff0c;通过构成决策树来求取净现值的期望值大于等于零的概率&#xff0c;评价项目风险&#xff0c;判断其可行性的决策分析方法&#xff0c;是直观运用概率分析的一种图解法。由于这种…

【MySql】MySQL 中的 INNER JOIN 和 LEFT JOIN 使用指南

像我这样迷茫的人 像我这样寻找的人 像我这样碌碌无为的人 你还见过多少人 像我这样庸俗的人 从不喜欢装深沉 怎么偶尔听到老歌时 忽然也晃了神 像我这样懦弱的人 凡事都要留几分 怎么曾经也会为了谁 想过奋不顾身 &#x1f3b5; 毛不易《像我这样的人》 …

Google DeepMind: Many-Shot vs. Few-Shot

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