C语言细节之定义与声明

2023-05-16

什么是定义什么是声明,似乎这俩个东西一样但是又有所区别,思考一下,如果你不能直接说出这二者的根本区别,那么本文对你还是有点用处的。
首先什么是定义?《C++Primer》第四版 2.3.5节中这么说到:

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

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

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

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

这样就很清楚了,所谓定义就是创建一个对象,为这个对象分配一块内存并给这块内存命名。从此这个变量名和这块内存地址就绑定了,并且这块

内存地址的位置也不能改变。一个变量或对象在一定的区域内只能定义一次,如果被多次定义,编译器会提示重复定义。

声明比较复杂,声明的第一重含义是告诉编译器这个名字已经匹配到到一块内存带上上了,下面的代码用到的变量已经在别的地方定义了。

第二重含义是告诉编译器这个名字我先预订了,别的地方不能再使用这个名字。这种用法最典型的就是void fun(int i,int c).

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

例如:extern int i; //声明,不是定义

             int i; //声明,也是定义           

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

例如:extern double pi=3.1416;  //定义

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

例如:extern double max(double d1,double d2);  //声明

4.除非有extern关键字,否则都是变量的定义。

例如:extern int i; //声明

             int i; //定义      

程序设计风格注意:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言细节之定义与声明 的相关文章

  • 线性判别分析(Linear Discriminant Analysis,LDA)

    基础不牢 xff0c 地动山摇 线性判别分析 xff08 Linear Discriminant Analysis xff0c LDA xff09 是一种经典的线性学习方法 xff0c 它既可以用于分类问题 xff0c 也可以用于有监督的特
  • java中HashMap原理

    1 为什么用HashMap xff1f HashMap是一个散列桶 xff08 数组和链表 xff09 xff0c 它存储的内容是键值对 key value 映射HashMap采用了数组和链表的数据结构 xff0c 能在查询和修改方便继承了
  • 手把手教你撸touchgfx的数字键盘(一)

    目录 1 准备工作 1 1 软件准备 1 2 硬件准备 2 键盘制作 2 1 键盘背景图设计 2 2 自定义键盘控件 2 3 screenview与keyboard之间传递消息 3 实验效果 4 功能拓展和项目资料 4 1 改进的方面 4
  • svn 命令行使用总结

    1 上传项目到SVN服务器上 svn import project dir xff08 本地项目全路径 xff09 http 192 168 1 242 8080 svn IOS Ben remote dir xff08 svn项目全路径
  • Ubuntu 基本使用和Bash编程基础

    Ubuntu基本使用 sudo 申请权限 linux 包管理工具 yum apt apt install XXX apt remove XXX apt autoremove XXX 常用指令 cd 进入目录 ls 查看文件 以点为开头的文件
  • CentOS7如何操作防火墙

    CentOS7中如何操作防火墙 查看防火墙状态 xff1a 命令 xff1a systemctl status firewalld service test 64 test1 systemctl status firewalld servi
  • ROS进二阶学习笔记(1) TF 学习笔记1:TF介绍 + tf工具

    ROS进二阶学习笔记 xff08 1 xff09 TF 学习笔记1 TF介绍 43 tf工具 Ref http wiki ros org tf Tutorials Learning tf gt gt Ref http wiki ros or
  • RGB颜色对照表

    修改字体颜色 xff0c 大小使用示例如下 xff1a lt font color 61 FFB6C1 size 61 5 face 61 34 隶书 34 gt color 61 FFB6C1 size 61 72 face 61 34
  • 顿悟系列-JS对象键值修改,删除

    在Angular开发中 xff0c 遇到了JS对象键值对的知识实际运用 xff0c 不常见 xff0c 但实用 假设我们需要把 var a 61 a 34 张三 34 b 34 24 34 c 34 帅哥 34 a这个对象的键值全部改变自己
  • OVN简介

    作者简介 xff1a 郑敏先 xff0c 就职于诺云系统 xff08 上海 xff09 有限公司 工作地点为南京的诺云研发中心 担任解决方案工程师 本人博客为 xff1a http blog csdn net zhengmx100 一 为什
  • Windows 实现 读取 HDFS 上 文件内容

    前几天一直在搞HDFS文件的下载与上传 xff0c 但是在集群内部可以 xff0c 在集群外部却出现了错误 xff0c 照说 xff0c HDFS的保密协议应该没那么高吧 xff0c 不解中 后来才发现自己网上找的代码 xff0c 却并未理
  • 图像地点场景类型识别(PlaceCNN)实践

    从图像中判断图像场景所处的地点类型 xff0c 是图像理解的一种常见任务 本质上场景类别标注数据足够的情况下 xff0c 它可以属于图像分类的一种 xff0c 因此直接利用现有成熟的网络架构如ResNet就可以实现较高精度的图像涉及场所的识
  • 【2021最新】Keras自定义Loss函数+接受输入+KerasTensor天坑解决方法

    文章目录 自定义函数 43 输入方法第一个错误第二个错误 自定义函数 43 输入方法 环境配置 xff1a Tensorflow2 4 xff0c keras2 4 3 Keras自定义Loss函数 xff0c 增加输入的方法 xff0c
  • 从零使用OpenCV快速实现简单车牌识别系统

    从零使用OpenCV快速实现简单车牌识别系统 这篇文章献给所有第一次听说车牌识别ANPR但需要短时间实现的苦逼同学们 最近的小学期实训做的是一个车牌识别系统 xff0c 说实话真不知道学校怎么想的 xff0c 虽然说图像处理也算的上是数字媒
  • SUMO交通仿真-核心概念和基础知识速览

    文章目录 sumo环境变量设置注意事项路网配置JOSM对地图进行 96 清洗 96 交通需求建模route amp trip输入数据方法流量路由分配 检测线圈车辆属性设置速度分布 特殊设置驾驶员状态事故仿真 仿真运行设置sumocfg 输出
  • Haar分类器原理1——矩形特征与积分图

    引言 Haar分类器又称Viola Jones识别器 xff0c 是Viola和Jones分别在2001年的 Rapid Object Detection using a Boosted Cascade of Simple Features
  • window打开服务的dos命令

    微软系统必备的dos命令 开始 gt 运行 输入以下命令 xff0c 或者win 43 R xff0c 输入以下命令 1 gpedit msc 组策略 2 sndrec32 录音机 3 Nslookup IP地址侦测器 4 explorer
  • 如何在windows server 2003服务器上创建web服务器和ftp服务器

    将xp客户机和server2003设置为同一网段VMnet1上 配置web服务器的IP地址 配置xp客户机的IP地址 检测xp客户机和web服务器是否互通 将文件解压缩到d盘 xff0c 查看到三个文件夹 安装web服务组件 打开开始 管理
  • Kali Linux 2020.3如何安装中文输入法

    安装ibus拼音输入法 sudo apt get install ibus ibus pinyin 设置ibus为首选默认输入法 im config 输入法配置的重要提示信息 xff0c 点击OK即可 是否确认更改设置输入法 xff0c 点

随机推荐

  • Markdown编辑器

    Markdown编辑器 按照Markdown编辑器的使用环境 xff0c 可以将它们归纳为三类 平台集成工具 xff1a 各大在线博客 社区平台自带的写作工具 xff0c 比如CSDN 博客园 简书等 独立软件类 xff1a 下载到自己机器
  • devstack安装OpenStack Pike版本 (OVN+VLAN)

    控制节点配置文件 Sample DevStack local conf This sample file is intended to be used for your typical DevStack environment that 3
  • Fiddler抓包Java请求遇到的问题(一)

    Fiddler 解决无法监听 Java 的 HttpUrlConnection 请求 官网 https www telerik com fiddler Q JavaTraffic jre DproxySet 61 true DproxyHo
  • Win10系统正确设置MTU值加快WIFI速度的方法

    MTU是Maximum Transmission Unit缩写 xff0c 中文名 xff1a 最大传输单元 工具 原料 硬件 xff1a 电脑 操作系统 xff1a Windows 10 方法 步骤 第一步 xff1a 查询自己电脑的MT
  • CentOS-7 安装Lustre-2.10.1文件系统

    注 xff1a 原创文章 xff0c 转载请注明出处 一 文档说明 Lustre 是一种强大的平行 分布式文件系统 xff0c 通常用于HPC行业 主要组建包括 xff1a 元数据服务器 Metadataservers xff0c MDSs
  • 【华为练习题】求麻将清一色和牌问题

    华为练习题 求麻将清一色和牌问题 题目 题目描述 xff1a 清一色是麻将番种之一 xff0c 指由一种花色的序数牌组成的和牌 数字1 9 xff0c 每个数字最多有4张牌 我们不考虑具体花色 xff0c 我们只看数字组合 刻子 xff1a
  • 使用vscode开发stm32

    vscode 下载地址 xff1a https code visualstudio com 安装插件 xff1a Cortec Debug Cortex Debug Device Support Pack STM32F1 图1 vscode
  • typedef 的用法

    typedef 的用法 以下是参考部分 此部分参考自 xff1a http blog sina com cn u 572f7666010008dm 用途一 xff1a 定义一种类型的别名 xff0c 而不只是简单的宏替换 可以用作同时声明指
  • C语言变参的使用

    C语言中有很多变参的使用 xff0c 例如printf 的原型是int printf const char fmt xff0c 那么C语言是如何解析和处理这些变参的呢 xff1f 下面进行简单的总结 xff1a C语言中定义了下面的一些宏
  • strstr函数的精彩之处

    在C的库函数里面有很多精彩的代码 xff0c 仔细分析会体会到这些写法和思路的巧妙之处 写strstr函数的时候要判断两个字符换str1和str2什么时候开始匹配 xff0c 什么时候结束 xff0c 这两点都是比较容易做到的 xff0c
  • RISC与CISC

    作者 xff1a Austin Wang 链接 xff1a http www zhihu com question 20783321 answer 72598657 这里简单来谈一下 xff0c ARM和X86之间为什么不太具有可比性的问题
  • NandFlash和NorFlash的区别

    一 xff0e NAND和NOR的比较 NOR和NAND是现在市场上两种主要的非易失闪存技术 Intel于1988年首先开发出NOR flash技术 xff0c 彻底改变了原先由EPROM 和EEPROM一统天下的局面 紧接着 xff0c
  • 安装 CORD 之前需要了解的术语

    CORD Central Office Re Architected as a Data Center 是ONF组织推动的开源的边缘计算的项目 CORD 项目的官方资料包括源代码 xff0c 安装指导等 本文对官方安装指导涉及的一些术语进行
  • SoC嵌入式软件架构设计之一:系统内存需求评估

    博主 xff1a 吴跃前 转载自 xff1a http www cnblogs com yueqian scut p 4015046 html SoC嵌入式软件架构设计之一 xff1a 系统内存需求评估 内存是SoC System on C
  • S5PV210启动过程分析

    刚刚接触 S5PV210 xff0c 看了官方的数据手册感觉跟以前用的 STM32 单片机根本不在一个层面上 xff0c 当然两者的用途不同 xff0c 不具备可比性 可能之前习惯使用 STM32 等单片机 xff0c 现在接触 S5PV2
  • ARM支持的4种堆栈工作方式

    1 满递增堆栈 xff1a 堆栈指针指向最后压入堆栈的数据 xff0c 且由低地址向高地址生成 2 满递减堆栈 xff1a 堆栈指针指向最后压入堆栈的数据 xff0c 且由高地址向低地址生成 3 空递增堆栈 xff1a 堆栈指针指向下一个要
  • 前变址、回写前变址、后变址

    根据数据传输传输的时机以及在指令执行后基址寄存器是否被更新 xff0c 寄存器变址有前变址 回写前变址和后变址暗中方式 执行指令的时候 xff0c 如果先进行变址运算 xff0c 后传递数据 xff0c 那么这种方式就是前变址方式 如图1所
  • ubuntu 配置 tftp 服务器

    注意 xff1a 1 tftpboot为根目录 2 已经是root权限不用再加sudo 临时获取权限 3 使用netstat au grep tftp xff0c 保证tftp是启动的 出现 udp 0 0 tftp 则说明tftp服务已经
  • STM32启动文件详解

    先在RAM中分配系统使用的栈 xff0c RAM的起始地址为0x2000 0000 然后在RAM中分配变量使用的堆 然后在CODE区 flash 分配中断向量表 xff0c flash的起始地址为0x0800 0000 xff0c 该中断向
  • C语言细节之定义与声明

    什么是定义什么是声明 xff0c 似乎这俩个东西一样但是又有所区别 xff0c 思考一下 xff0c 如果你不能直接说出这二者的根本区别 xff0c 那么本文对你还是有点用处的 首先什么是定义 xff1f C 43 43 Primer 第四