c语言中声明的问题【求个关注!】

文章目录

  • 1 变量的声明与定义
    • (1)定义与声明的区别:
    • (2)为什么要区分定义与声明?
    • (3)extern是什么 ?
    • (4)举例:
  • 2 函数的声明:
      • 函数声明的格式:
      • 函数声明的本质:
      • 最后


1 变量的声明与定义

(1)定义与声明的区别:

变量定义是为变量分配内存空间,并赋予初始值
变量声明是向程序表明变量的类型与名字
定义也是声明,但声明不是定义
在程序中我们可以声明多次,但只能定义一次,这就好比,我们可以使用很多次锤子,但是锤子只有一把

(2)为什么要区分定义与声明?

程序员们编写程序时,不会将程序全部写在一个.c文件中(这样不能使程序员们同时进行编码,
且代码可读性很差),
而是存放在多个文件中去, 如果我们想引用其他文件定义的变量,函数,则需要用到声明,声明的作用即
告诉
编译器,有这个函数或变量,可以调用,而在链接阶段使程序去查找变量或函数的定义。

(3)extern是什么 ?

extern是C/C++中的一个关键字,用于声明一个全局变量或函数,表示该变量或函数是在其他文件中定义的。
它的作用是告诉编译器该变量或函数的定义在其他地方,而不是当前文件中。具体来说,extern可以用于以下两种情况:声明全局变量:当在一个文件中声明一个全局变量时,如果该变量是在其他文件中定义的,
就需要使用extern关键字进行声明。这样编译器在编译时就知道该变量是在其他文件中定义的,并且可以正确地链接到该变量的定义处。声明外部函数:当在一个文件中调用一个函数时,如果该函数是在其他文件中定义的,也需要使用extern关键字进行声明。这样编译器在编译时就知道该函数是在其他文件中定义的,并且可以正确地链接到该函数的定义处。总结一下,extern关键字用于声明全局变量或函数的定义在其他文件中。
它的作用是告诉编译器该变量或函数的定义在其他地方,以便正确地链接到定义处。

(4)举例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include 包含文件的功能本质上即是声明,这与extern的功能相同,所以二者选其一即可,
在声明时,我发现在VS2022上,不用extern关键字也行,比如直接声明int b

2 函数的声明:

在c语言中,默认的情况是只能定义在后的函数调用定义在前的函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x, int y) {return x + y;
}
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}

在这里插入图片描述

如果调用定义在后的函数:则在c标准编译器中会报错,(gcc编译器中只会报警告)
如果想调用定义在后的函数,则需要用对应的函数声明(被调用函数的)   

如果将main函数与Add函数的位置调换:

int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
int Add(int x, int y) {return x + y;
}

函数声明的格式:

//int Add(int x, int y);
//声明的格式是:
//返回值类型  函数名(形参类型 形参名  ....);
//声明放在定义在前的函数之前:```c
#include<stdio.h>
int Add(int x, int y);
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
int Add(int x, int y) {return x + y;
}

函数声明的本质:

//声明的本质是什么?
//声明可以看作告诉编译器,所调用的函数存在,函数的基本信息是什么
(返回值类型,函数名等等),
// 而不会去探究函数体是什么,是否定义,在链接阶段,才会去查找
声明函数的函数体,如果函数并不存在:
,则会在链接阶段报错,而解决问题就是添加上对应的函数定义

例如:

#include<stdio.h>
int Add(int x, int y);int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果表明是链接阶段出现错误

最后

函数的声明并不仅仅用于定义在前的函数调用定义在后的函数
,也用于引用其他文件中函数,比如include 包含头文件本质上就是声明的一种:
例子:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者:

//#include"Add.h"
//上面与下面的语句本质相同,均是声明!
int Add(int x, int y);
#include<stdio.h>
int main() {int a = 3, b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
# 2 

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

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

相关文章

使用Docker定时备份数据

文章目录 一、Docker镜像制作二、MySQL数据备份三、Minio数据备份四、数据跨服务器传输五、Nginx日志分割六、Docker启动七、Docker备份日志 一、Docker镜像制作 镜像制作目录 mc下载地址 - rsyncd.conf # https://download.samba.org/pub/rsync/rsyncd.conf.5port 873 uid …

Qt控件---布局管理类

文章目录 QVBoxLayout&#xff08;垂直布局&#xff09;QHBoxLayout&#xff08;水平布局&#xff09;QGridLayout&#xff08;网格布局&#xff09;拉伸 QFormLayout&#xff08;表单布局&#xff09;QSpacerItem&#xff08;空白&#xff09; QVBoxLayout&#xff08;垂直布局…

Apache Doris 基于 Job Scheduler 实现秒级触发任务调度能力

作者&#xff5c;SelectDB 技术团队 在数据管理愈加精细化的需求背景下&#xff0c;定时调度在其中扮演着重要的角色。它通常被应用于以下场景&#xff1a; 定期数据更新&#xff0c;如周期性数据导入和 ETL 操作&#xff0c;减少人工干预&#xff0c;提高数据处理的效率和准…

【王道数据结构笔记】顺序表的静态分配代码分析

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

2024-04-08

作业要求&#xff1a; 1> 思维导图 2>使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否…

攻防世界05view_source

鼠标右键无法查看源代码&#xff0c;但是可以直接F12进行查看 但是没有办法复制&#xff0c;可以在地址前面加上view-source 这时候就可以复制了 知识点1&#xff1a;view-source协议-查看源码 view-source是一种协议&#xff0c;早期基本上每个浏览器都支持这个协议。后来Mi…

C语言基础(四)

C语言基础 一维数组数组初始化全部初始化部分初始化数组的默认值冒泡排序 字符数组 二维数组初始化行数是否可省略列数是否可以省略部分初始化 访问二维字符数组 函数分类库函数自定义函数调用自定义函数函数声明 一维数组 概念&#xff1a;一组数据类型相同的元素的集合 <…

无人机巡检技术革命性变革光伏电站运维管理

在中国广袤的大地上&#xff0c;光伏电站如雨后春笋般崛起&#xff0c;晶体硅组件板在阳光下熠熠生辉&#xff0c;为人们带来了源源不断的绿色能源。然而&#xff0c;随着光伏产业的迅猛发展&#xff0c;电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入&#xff0c;…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端)&#xff1a; 注意&#xff1a;unity的规则中类&#xff0c;名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

TypeScript 忽略红色波浪线

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

CNN-Transformer时间序列预测

部分代码&#xff1a; # CNN-Transformer class CNNTransformerEncoder(nn.Module):def __init__(self, input_features, transformer_encoder_heads,embedding_features, cnn_kernel_size, dim_feedforward_enc, n_encoder_layer):super(CNNTransformerEncoder, self).__init…

数模 初见数建

文章目录 初见数学建模1.1 数学建模是什么1.2 数学建模的概述1.3 如何学习数学建模---分模块化1.4 数学建模前提了解1.5 数学建模的六个步骤1.6 如何备战建模比赛1.7 数学建模赛题类型1.8 数学建模算法体系概述 初见数学建模 1.1 数学建模是什么 1.原型与模型 原型&#xff…

ssm048电子竞技管理平台的设计与实现+jsp

电子竞技管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电子竞技管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库&#xff0c;使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括&#xff1a; 小巧轻量&#xff1a;Alpine Linux的安装…

【新版】系统架构设计师 - 知识点 - 面向对象开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 面向对象开发方法面向对象开发方法面向对象的分析需求模型分析模型 面向对象的设计 用例模型关系、UML事务关系、类的关系 架构 - 知识点 - 面向对象开发方法 面向对象开发方法 分析阶段…

<-泛型->

1.泛型的概念 所谓泛型&#xff0c;就是允许在定义类, 接口 时通过一个"标识"表示类中某个属性的类型或者某个方法的返回值或形参类型.这个类型参数将在使用时确定. 2.举例 (1). 集合类在设计阶段/声明阶段不能确定这个容器到底存的是什么对象&#xff0c;所以在JDK…

微信小程序制作圆形进度条

微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹&#xff0c;比如 mycircle 吧&#xff0c;另外把对应 page 的相关文件都建立出来&#xff0c;包括 js&#xff0c;json&#xff0c;wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…

51蓝桥杯之DS18B20

DS18B20 基础知识 代码流程实现 将官方提供例程文件添加到工程中 添加onewire.c文件到keil4里面 一些代码补充知识 代码 #include "reg52.h" #include "onewire.h" #include "absacc.h" unsigned char num[10]{0xc0,0xf9,0xa4,0xb0,0x99,…

随机链表的复制 - LeetCode 热题 32

大家好&#xff01;我是曾续缘&#x1f4a4; 今天是《LeetCode 热题 100》系列 发车第 32 天 链表第 11 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff…

【leetcode面试经典150题】28.盛最多水的容器(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…