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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中&#xff0c;每部署一个服务时&#xff0c;就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…

10-菜刀连接木马

找到了漏洞后&#xff0c;并且上传了木马之后才能使用的两款工具 中国菜刀和冰蝎 想办法获取别人的cookie&#xff0c;cookie中有session-id 一、中国菜刀 1、必须提前已经完成木马植入然后才能使用 2、木马必须是POST请求&#xff0c;参数自定义&#xff0c;在菜刀里给出…

文件操作(C语言)

目录 1.为什么使用文件&#xff1f; 2.什么是文件&#xff1f; 2.1程序文件 2.2数据文件 2.3文件名 3.二进制文件和文本文件 4.文件的打开和关闭 4.1流和标准流 4.1.1流 4.1.2标准流 4.2文件指针 4.3文件的打开和关闭 5.文件的顺序读写 5.1顺序读写函数介绍 5.2…

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 本文将介绍如何使用VS2022克隆下载《植物大战僵尸C自制版本》。 Gitee项目地址&#xff1a; Gitee仓库地址https://gitee.com/GITLZ/PlantsVsZombies Github项目地址&#xff1a; Github仓库地址https://github…

IoC与Spring

目录 IoC控制反转 现实案例 特点 目的 DI依赖注入 小总结 介绍Spring 狭义和广义上的Spring 传统编码方式的不足 需求引入 弊端分析 IoC控制反转 现实案例 1、买水果问老板各种水果的口感而不是自己去挨个尝试一遍。 2、买房子找中介而不是自己去花时间找房东。…

金蝶云星空与旺店通·企业版对接集成供应商查询打通创建供应商

金蝶云星空与旺店通企业版对接集成供应商查询打通创建供应商 接通系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平…

RK3588 linux 修改ulimit 配置

前言 ulimit 主要是用来限制进程对资源的使用情况的&#xff0c;它支持各种类型的限制&#xff0c;常用的有&#xff1a; 内核文件的大小限制进程数据块的大小限制Shell进程创建文件大小限制可加锁内存大小限制常驻内存集的大小限制打开文件句柄数限制分配堆栈的最大大小限制C…

如何提高直线模组的技术水平?

在工业制造业中&#xff0c;不管我们使用任何机械产品&#xff0c;都有一个共同的出发点&#xff0c;就是能用先进的技术突破其产品的性能及使用性。那么直线模组究竟是用什么技术突破其产品的使用性的呢&#xff1f; 1、优化机械设计&#xff1a;设计过程中应充分考虑模组的结…

OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | 基于YOLOv9SAM实现动态目标检测和分割&#xff08;步骤 代码&#xff09; 0 导 读 本文主要介绍基于YOLOv9SAM实现动态目标检测和分…

微信小程序展示倒计时

html <view class"countdown"> <text>倒计时&#xff1a;</text> <text wx:for"{{countdown}}" wx:key"index">{{item}}</text> </view> ts data: {countdown: [], // 存放倒计时数组 targetTime:…

【个人博客搭建】(8)全局异常处理

1、net 8 webapi 全局异常处理: 在 .NET 8 WebAPI 中&#xff0c;全局异常处理可以通过实现**IExceptionHandler接口或使用IAsyncExceptionFilter接口来完成**。 首先&#xff0c;关于IExceptionHandler接口&#xff0c;它是ASP.NET Core中用于全局异常处理的新抽象。这个接口有…

从小到大输出四个整数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int a, b, c, d;int t 0;//提示用户&#xff1b;printf("请输入四个整数a b c d&…

C语言趣味代码(一)

C语言相关知识点的博客和大家分享完了&#xff0c;接下来我想开始数据结构相关的博客&#xff0c;在此之前呢&#xff0c;有的小伙伴问过我学完C语言的相关知识&#xff0c;我能干些什么呢&#xff1f;只有刷题吗&#xff1f;这不禁让我反思&#xff1a;在我们学习的过程中&…

【RSGIS数据资源】2001-2022年中国玉米种植分布数据集

文章目录 数据介绍精彩截图2001&#xff5e;2020年中国玉米种植频率分布2001年至2020年研究区域融合数据的平均填充百分比。 数据介绍 2001-2022年中国玉米种植分布数据集&#xff08;CCD-Maize&#xff09;&#xff0c;涵盖中国22个省、市的玉米种植分布图&#xff0c;文件格…

一文搞定 EventLoop、宏任务、微任务

面试官&#xff1a;你了解JavaScript事件循环吗&#xff0c;掌握多少&#xff0c;把你知道的都说一下。 今天我们就来说一下&#xff0c;JavaScript作为一门单线程语言&#xff0c;如何通过事件循环&#xff08;Event Loop&#xff09;和任务队列&#xff08;Task Queue&#…

CTFHUB-技能树-Web前置技能-文件上传(无验证,JS前端验证,前端验证)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09;文件上传无验…

关联规则挖掘(二)

目录 三、FP-增长算法&#xff08;一&#xff09;算法的背景&#xff08;二&#xff09;构造FP-树&#xff08;三&#xff09;生成频繁项集 四、关联规则的评价&#xff08;一&#xff09;支持度和置信度的不足&#xff08;二&#xff09;相关性分析 三、FP-增长算法 &#xf…

C++内存管理——new/delete、operator new/operator delete

内存管理 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);int* pt…

tcp三次握手和四次断开以及tcpdump的基本使用

前言 最近工作中会发现有超时的问题&#xff0c;还有就是在面试的时候很多都要求深入理解TCP/IP协议。突然感觉TCP/IP协议是一个既熟悉&#xff0c;又陌生的技术。又想到上大学的时候&#xff0c;老师说过 网络的圣经&#xff1a;“TCP/IP详解” 卷一 卷二 卷三&#xff0c;三…

IIC总线读取温度湿度传感器数据实验

iic.c #include "iic.h"extern void printf(const char* fmt, ...); /** 函数名 &#xff1a; delay_us* 函数功能&#xff1a;延时函数* 函数参数&#xff1a;无* 函数返回值&#xff1a;无* */ void delay_us(void) //微秒级延时 {unsigned int i 2000;while(i-…