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

news2024/11/17 16:00:09

声明(declaration)与定义(definition)

 为了使不同的文件都可以访问同一个变量,C会区 分变量的声明和定义。
  变量的定义会为这个变量分配存储空间,并且 可能 会为其指定一个初始化的值, 一个变量的定义有且 仅有一处。 定义实际上是一种特殊的声明。 变量的声明会将变量的类型和名称传达给程序。当 然。我们可以通过使用“extern” 关键字来声明一个 变量,而不用定义它。声明的形式就是在变量的名 字和类型前面,加上关键字“extern”

此处就得讲一下extern的用处了:

1、extern关键字用法一是用来声明一个变量的,告诉编译器我这个变量已经定义过了,但不一定在我这个声明前面,让编译器自己去找,如:

  我在main函数后面定义的a变量,但是我能在main函数里使用a,而且打印结果是10,

2、 extern关键字用法二,用于声明在别的文件中已经定义好的变量,但是该变量不能是静态变量,通俗一点说就是,假设我有两个文件A和B,我在A文件中定义了变量sum,我想在B文件中使用,此时我可以在B文件中用extern声明一下sum,则可以用A文件中的变量sum

 声明

  告诉程序一个变量或者函数已经被定义, 不会分配空间   可以被声明多次

定义

 分配变量的空间  只能定义一次

定义包含了声明,但是声明不包含定义,如

int a = 0;     //定义并声明了变量 a
extern int a;  //只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。

二、高级声明

 typedef  int *apple#define peach int *

 typedef是一种彻底的封装类型——在声明它之后不能 再往里面增加别的东西。 它和宏的区别体现在两个方面:
 1、不能用其他类型说明符进行扩展。
  unsigend apple j; // 这是非法的!
  unsigned peach i; // 没问题, i 是指向无符号整型变量的指针
 2、在连续几个变量的 声明中,#define定义的类型不能 保证所有的变量为同种类型。
  apple a, b; // a b 都是指向整型变量的指针
  peach c, d; // c 是整型变量指针, d 是整型变量

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

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

相关文章

七种最新群智能优化算法(NOA、LSO、SWO、ZOA、EVO、KOA、GRO)求解23个基准测试函数(含参考文献及MATLAB代码)

一、七种算法简介 (1)星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜…

路径规划算法:基于浣熊优化的路径规划算法- 附代码

路径规划算法:基于浣熊优化的路径规划算法- 附代码 文章目录 路径规划算法:基于浣熊优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法浣熊…

调频连续波(FMCW)波形设计、真实道路场景仿真及汽车自适应巡航控制信号处理(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 以下是关于调频连续波(FMCW)波形设计、真实道路场景仿真以及汽车自适应巡航控制信号处理的概述&#x…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境,需要在 WSL 里也装上 C、CMake 系列的插件,如下图的直接下载方式特别慢: 【解决方法】 先去网站下载插件:https://marketplace.visualstudio.com/,后缀名:…

【DFS】LeetCode 17. 电话号码的字母组合

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! 目录 题目:示例: 题解:代码实现: 题目: 示例: 题解: 这是一道全排列的问题,先来看看示例. 看第一个示例:输入"23",其对应的是"abc&qu…

【GIT】如何在GitHub上向一个开源项目贡献代码?

如何在GitHub上向一个开源项目贡献代码 参考链接:https://www.bilibili.com/video/BV1WC4y1a76G/?p1&t175 一、fork目标仓库的代码 必须先fork别人的代码到自己仓库之后才能修改代码,不能直接修改别人的代码。 这样就fork到自己的仓库了。 二、…

学习react,复制一个civitai-更新2

更新内容 耗时一个礼拜左右,增加了个新界面:模型图片详情界面。 看看效果图吧: 功能介绍 操作:在模型详情界面点击一个图片,就能到图片详情界面 1.点击哪个图片,就会展示哪个,同时还会更新图…

【C++】面试基础搬运

c/c c三大特性 封装 最开始接触代码是C语言,那么开始写一些逻辑代码的时候会很麻烦,因为你要在函数中定义变量,然后按顺序写对应的逻辑,接着可以将逻辑封装成函数。当时会感觉很麻烦,因为很散装,知道后面…

docker-compose 常用命令(附 docker-compose 的安装教程)

本文目录 1. docker-compose 介绍1. docker-compose 简介2. docker-compose 安装3. docker-compose 卸载 2. docker-compose 常用命令1. docker-compose 命令格式2. docker-compose up3. docker-compose ps4. docker-compose stop5. docker-compose down6. docker-compose logs…

虚幻引擎程序化资源生成框架PCG 之Gather(收集)、Merge(合并)、Union(并集)

有朋友询问:Gather(收集)、Merge(合并)、Union(并集)这三个运算节点,看名字有些相似,究竟区别是什么?目前还没有详细的官方文档,所以今天老王结合…

电脑城逐渐衰退甚至消失,究竟是好是坏呢?

在过去很长一段时间里,想要购买电子设备都逃不开一个叫“电脑城”的地方,那里鱼龙混杂良莠不齐,是令许多人记忆深刻分外难忘之处。但是随着时代发展电商兴起,采用传统线下销售的电脑城却逐渐衰退甚至面临消失。 电脑城曾经是很多…

【2】Spring手写模拟-依赖注入、初始化、AOP

首先回顾一下我们之前的流程ApplicationContext 构造方法 获取Spring配置类ComponetScan 注解,扫描包,获取其路径及其对应的字节码文件逐个扫描字节码文件 利用字节码文件获取类,查看是否包含Componet 注解,并获取或者生成BeanNa…

vv、vt 埋点上报自动化文档

vv、vt 埋点自动化文档 文章目录 vv、vt 埋点自动化文档一、项目简介二、环境搭建Airtest官方参考文档AirtestIDE下载Python环境安装Airtest安装安卓环境IOS 环境iOS-Tagent 编译 设置代理 三、框架介绍四、实现原理4.1 框架流程图4.2 初始化配置4.2.1 读取mock server配置&…

sqli-labs

目录 Less1 首先来爆字段 联合注入 判断注入点 爆数据库名 爆破表名 information_schema information_schmea.tables group_concat() 爆破列名 information_schema.columns 爆值 SQLMAP 主要对sqli-labs 的深入学习 Less1 我们先看看源代码 <?php //includ…

山西电力市场日前价格预测【2023-07-16】

日前价格预测 预测明日&#xff08;2023-07-16&#xff09;山西电力市场全天平均日前电价为395.36元/MWh。其中&#xff0c;最高日前电价为510.19元/MWh&#xff0c;预计出现在20: 00。最低日前电价为309.52元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a;实…

如何从零开始搭建公司自动化测试框架?

搭建的自动化测试框架要包括API测试&#xff0c;UI测试&#xff0c;APP测试三类。以上三类其实可以简化为两类&#xff0c;那就是&#xff1a; 1&#xff09;接口自动化测试框架搭建 2&#xff09;UI自动化测试框架搭建。 没问题&#xff0c;安排&#xff0c;且是手把手教你如何…

Next.js框架入门笔记

内置组件 ‘pages/_document.js’ 文件&#xff0c;自定义document DOC&#xff1a; https://www.nextjs.cn/docs/advanced-features/custom-document <Head>组件 <Head>是一个内置在 Next.js 中的 React 组件。它允许您修改页面的<head>。 Docs: https:/…

JVM理论(四)运行时数据区--堆/方法区

堆(heap) 堆内存逻辑上分为三部分 一个JVM实例只存在一个堆内存,JVM启动时创建堆区&#xff0c;通常情况下也是最大的内存空间&#xff0c;几乎所有的对象实例都要在堆中分配内存&#xff0c;所以堆也是垃圾回收的重点区域堆是被所有线程共享的,在堆里面也可以划分线程私有的缓…

肝!熬夜到天明,阿里顶配级 Spring Security 笔记

Spring Security Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是 Spring 生态系统中的一员&#xff0c;因此它伴随着整个 Spring 生态系统不断修正、升级&#xff0c;在 spring boot 项目中加入 springsecurit…

Ubuntu下安装Miniconda

下载 到根据自己本地python版本到官网下载 https://docs.conda.io/en/latest/miniconda.html#linux-installers 我本地是python3.8 然后上传到Ubuntu服务器上&#xff0c;或者直接使用wget下载&#xff1a; wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5…