【C语言|关键字】C语言32个关键字详解

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍标准C语言的32个关键字🍭
😎金句分享😎:🍭有机会一定要试试,其实试错的成本并不高,而错过的成本很高🍭

目录

  • 一、概述
  • 二、什么是定义?什么是声明?
  • 三、基本数据类型 : char、short、int、long、float、double
    • 3.1 数据类型 与 模子
    • 3.2 变量命名规则
  • 四、构造类型:struct、enum、union
    • 4.1 struct 关键字
      • 4.1.1 结构体大小
      • 4.1.2 柔性数组(可变长数组)
    • 4.2 enum 关键字
    • 4.3 union 关键字
  • 五、


在这里插入图片描述

一、概述

C语言有多少个关键字?各个关键字有什么作用?本文将详细介绍C语言的关键字,可能一篇文章写不完 ,将在后面文章继续完善。C语言的关键字有32个,我将它主要分成下面四个方面来介绍。

功能关键字
类型(10个)char、short、int、long、float、double、void、struct、union、enum
修饰类型(8个)auto、static、extern、register、volatile、const、signed、unsigned
结构语句(11个)do、for、while、break、continue、goto、if、else、switch、case、default
其他(11个)typedef、return、sizeof

在这里插入图片描述

二、什么是定义?什么是声明?

在学习下面的基本数据类型前,先弄清楚定义和声明有什么区别?怎么区分呢?
下面这两句代码,哪个是声明,哪个是定义?

char c;
extern int i;
  • 定义:是分配一块内存,并给这块内存取一个名字,这个名字就是变量名;
    在该变量的所在区域内,该变量只能被定义一次;
    定义的同时可以初始化。
  • 声明:告诉编译器,这个名字已经在使用了,下面代码用到该名字是在其他地方定义的;
    声明可以出现多次;
    声明不能初始化;
    如果变量或函数在其他文件定义的,声明时必须加extern修饰,如果定义在本文件,则加不加extern都可以。

可以参考下面代码加深理解:

//extern.c
int extern_val;
int get_extern_val()
{return extern_val;
}

复制上面代码保存为extern.c;

// main.c
#include <stdio.h>extern int extern_val; 		// 声明,变量定义在其他文件(extern.c)
extern int get_extern_val();// 声明,函数定义在其他文件(extern.c)extern int val;				// 声明,变量定义在本文件
extern int get_val();		// 声明,函数定义在本文件// 下面是不加extern的声明,声明可以多次 2023-09-30 16:39:16
int val;		// 不加extern的声明,变量定义在本文件
int get_val();	// 不加extern的声明,变量定义在本文件int main()
{extern_val = 0;get_extern_val();val = 1;get_val();return 0;
}int val=1;
int get_val()
{return val;
}

复制上面代码保存为main.c;
在Ubuntu 18.04系统使用版本为7.5的gcc编译器,通过命令gcc main.c extern.c可以正常编译上面代码。
在这里插入图片描述

在这里插入图片描述

三、基本数据类型 : char、short、int、long、float、double

在32个关键字中,C语言的基本数据类型就占用了6个了,这些基本数据类型主要用来定义变量或者作为函数的参数或返回值类型。各个类型占用了多少个字节的内存?printf打印时用什么字符打印?这些基础知识,本文不涉及。有一点,long型在32位系统是4个字节 ,在64位系统是8个字节。
在这里插入图片描述

3.1 数据类型 与 模子

数据类型就像模子一样,以内存为材料,打造出具有不同字节的变量。
当你定义一个char型变量时,就像用拥有一个字节的“模子”从内存咔出来一个字节大小的“饼”;
当你定义一个int型变量时,就像用拥有四个字节的“模子”从内存咔出来四个字节大小的“饼”;

总之,当使用数据类型定义变量,本质上就是从内存中取出一块该类型大小的内存,并给这个内存定义一个唯一的名字。
在这里插入图片描述

3.2 变量命名规则

  • 命名最好采用英文单词或其组合,别使用拼音,可望文知意,便于记忆和阅读;

  • 尽量避免名字中出现数字编号,如 Value1,Value2 等

  • 对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符)。 (GUI_ , etc)

  • 由多个词组成时,每个词的第一个字母大写,其余全部小写,比如:int CurrentVal;,或用下划线隔开,如:int current_val;

  • 程序中不得出现仅靠大小写区分的相似的标识符,如:int x, X;

  • 所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词:
    const int MAX_LENGTH = 100;#define FILE_PATH “/usr/tmp”

  • 定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据。

  • 不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展

  • 命名可以参考下图规范,按照标识符前缀(后缀) + 含义标识 。非全局变量可以不用使用范围限定符前缀。
    在这里插入图片描述

  • 作用域前缀命名规则:
    全局变量、函数(global):g
    静态变量、函数(native):n

  • 数据类型前缀命名规则:

数据类型前缀命令例子
boolean类型bboolean bVariable;
char类型cchar cVariable;
int类型iint iVariable;
short类型sshort sVariable;
long类型llong lVariable;
unsigned类型uunsigned int uiVariable;
double 类型ddouble dVariable;
float 类型ffloat fVariable;
  • 含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。

在这里插入图片描述

四、构造类型:struct、enum、union

4.1 struct 关键字

struct 关键字,会将一些相关联的数据打包成一个整体,方便使用。

程序开发过程中经常要传送的不是简单的字节流(char 型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体,如果将这样的数据放在char型数组中,再使用指针偏移去获取数据,会使编程变得很复杂,而使用struct关键字定义的结构体可以轻松解决这种问题。

另外,当函数参数超过4个时,使用起来容易出错,降低效率,可以使用结构体压缩形参。

4.1.1 结构体大小

结构体所占的内存大小是其成员所占内存之和。如果结构体里没有成员,它的大小会跟编译器有关,下面代码,在Ubuntu18.04 使用gcc编译器编译后,没有成员的结构体大小是0,使用g++编译器编译后,没有成员的结构体大小是1.

// main.c
#include <stdio.h>
typedef struct stStudent
{}stStu;
int main()
{printf("%ld\n",sizeof(stStu));return 0;
}

在这里插入图片描述

4.1.2 柔性数组(可变长数组)

C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。 sizeof 返回的这种结构大小不包括柔性数组的内存。柔性数组的定义可以参考下面代码,虽然定义了arr数组,但它并没有使结构体占用的内存增加,整个stStu的大小还是4个字节:

typedef struct stStudent
{int i;int arr[];	// 没指定数组大小
}stStu;typedef struct stStudent
{int i;int arr[0];// 指定数组大小为0
}stStu;

柔性数组的使用可以参考下面代码,定义结构体指针pStu指向malloc分配的一块内存,然后就可以通过pStu->arr[n]去访问数组元素,因为这块内存是malloc分配的,如果arr后面的空间不够的话,就可以动态去调整,这就是被成为柔性数组或可变长数组的原因:

stStu *pStu = (stStu*)malloc(sizeof(stStu)+100*sizeof(int));

完整使用例子如下:

// flexible_arr.c 2023-10-06 21:06:04
#include <stdio.h>
#include <stdlib.h>typedef struct stStudent
{int i;int arr[];
}stStu;
int main()
{stStu *pStu = (stStu*)malloc(sizeof(stStu)+100*sizeof(int));printf("stStu=%ld pStu=%ld\n",sizeof(stStu),sizeof(*pStu));int i=0;for(i=0; i<10; i++){pStu->arr[i] = i;}printf("arr:");for(i=0; i<10; i++){printf("%d,",pStu->arr[i]);}printf("\n");return 0;
}

4.2 enum 关键字

4.3 union 关键字

在这里插入图片描述

五、

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

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

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

相关文章

Iphone文件传到电脑用什么软件,看这里

在数字化时代&#xff0c;文件传输已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;苹果用户在将手机文件传输到电脑时&#xff0c;往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是&#xff0c;很多人开始寻找更便捷的解决方案。在本文中…

Zabbix自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…

蓝桥杯每日一题2023.10.2

时间显示 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 输入为毫秒&#xff0c;故我们可以先将毫秒转化为秒&#xff0c;由于只需要输出时分&#xff0c;我们只需要将天数去除即可&#xff0c;可以在这里多训练一次天数判断 #include<bits/stdc.h> using namespace std…

总结二:linux面经

文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改&#xff1f;3、说说常用的Linux命令&#xff1f;4、说说如何以root权限运行某个程序&#xff1f;5、 说说软链接和硬链接的区别&#xff1f;6、说说静态库和动态…

C/C++学习 -- SHA-256算法

SHA-256算法概述 SHA-256代表"Secure Hash Algorithm 256-bit"&#xff0c;是一种安全的哈希算法&#xff0c;输出固定长度的256位&#xff08;32字节&#xff09;哈希值。SHA-256被广泛用于加密、数字签名、密码学以及区块链等领域&#xff0c;因为它提供了高度的安…

【Word】公式编辑器中连字符/减号等显示偏长/过长

问题 当公式编辑器中出现连字符的时候&#xff0c;连字符显示偏长&#xff0c;如下图所示&#xff1a; 方法 在连字符的前后加上双引号后即可解决连字符显示偏长的问题。 最终效果对比如下&#xff1a; 结语 Word的公式编辑器中&#xff0c;双引号内部的内容被当做普通…

VBA_MF系列技术资料1-197

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

STM32CubeMX学习笔记-DAC接口使用(输出电压)

STM32CubeMX学习笔记-DAC接口使用&#xff08;输出电压&#xff09; 一、DAC简介二、DAC通道选择三、新建工程四、DAC14.1 参数配置4.2 生成代码 五、库函数六、修改main函数 原创链接 1 一、DAC简介 DAC(Digital-to-Analog Converter)&#xff0c;即数字/模拟转换模块&#x…

【动手学深度学习-Pytorch版】Transformer代码总结

本文是纯纯的撸代码讲解&#xff0c;没有任何Transformer的基础内容~ 是从0榨干Transformer代码系列&#xff0c;借用的是李沐老师上课时讲解的代码。 本文是根据每个模块的实现过程来进行讲解的。如果您想获取关于Transformer具体的实现细节&#xff08;不含代码&#xff09;可…

mac清理垃圾的软件有哪些?这三款我最推荐

没错&#xff0c;Mac电脑真的好用&#xff0c;但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性&#xff0c;系统的缓存垃圾常常隐藏得让人发现不了。不过&#xff0c;别担心&#xff01;有一些专业的Mac清理软件可以帮你解决这一系列问题&#xff0c;让清理垃圾变得轻松…

2023-10-06 LeetCode每日一题(买卖股票的最佳时机含手续费)

2023-10-06每日一题 一、题目编号 714. 买卖股票的最佳时机含手续费二、题目链接 点击跳转到题目位置 三、题目描述 给定一个整数数组 prices&#xff0c;其中 prices[i]表示第 i 天的股票价格 &#xff1b;整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易&…

Java基于SSM+Vue的平时成绩管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…