【C语言】(5)关键字
liebian365 2025-01-04 21:17 37 浏览 0 评论
C语言中的关键字是预先保留的标识符,具有特定的含义。程序员在定义变量、函数名等标识符时不能使用这些关键字。本文将对C语言中的关键字进行详细的介绍,并介绍C99和C11标准中新增的关键字。
标准关键字
C语言标准定义的关键字主要包括数据类型、流程控制、函数和数据结构定义等方面。下表列出了这些关键字及其说明:
关键字 | 说明 |
auto | 声明自动变量,现在很少使用 |
break | 跳出最内层的循环或switch语句 |
case | switch语句中的一个分支 |
char | 声明字符型变量或函数返回值类型 |
const | 声明常量,防止变量的值被修改 |
continue | 继续下一次循环的迭代 |
default | switch语句中的默认分支 |
do | do-while循环的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | if语句的否定分支 |
enum | 声明枚举类型 |
extern | 声明外部变量或函数 |
float | 声明浮点型变量或函数返回值类型 |
for | for循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
register | 声明寄存器变量,现在很少使用 |
return | 函数返回语句 |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量的长度 |
static | 声明静态变量,限定变量的作用域 |
struct | 声明结构体类型 |
switch | 开关语句 |
typedef | 为数据类型定义别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明无返回值的函数或无类型的指针 |
volatile | 声明易变变量,防止编译器优化 |
while | while循环语句 |
C99 新增关键字
C99标准引入了一些新的关键字,以支持新的语言特性,如布尔类型、复数类型和内联函数等。
关键字 | 说明 |
_Bool | 布尔类型,值为true或false |
_Complex | 复数类型 |
_Imaginary | 虚数类型 |
inline | 声明内联函数 |
restrict | 限定指针,表示指针是访问数据的唯一方式 |
C11 新增关键字
C11标准进一步增加了几个关键字,以增强语言的功能和安全性。
关键字 | 说明 |
_Alignas | 指定变量或类型的对齐方式 |
_Alignof | 查询类型或变量的对齐要求 |
_Atomic | 声明原子类型变量 |
_Generic | 根据表达式类型选择表达式 |
_Noreturn | 表示函数不会返回到调用者 |
Staticassert | 编译时断言,用于编译时条件检查 |
Threadlocal | 声明线程局部存储期的变量 |
了解和熟悉这些关键字对于编写有效和符合标准的C程序至关重要。C语言的关键字集是相对稳定的,但随着新标准的发布,可能会有新的关键字加入。因此,保持对C语言标准的更新有一定的了解是有益的。
extern关键字
1. 简介
用于声明一个变量或函数是在其他地方定义的。它的主要作用是提供对位于其他文件中的全局变量或函数的访问。
2. 基本用法
当你在多个文件中使用相同的全局变量或函数时,你可以在一个文件中定义它们,并在其他文件中使用 extern 关键字来声明它们。
示例 - 全局变量:
// 文件1:file1.c
int globalVar = 10; // 定义全局变量
// 文件2:file2.c
extern int globalVar; // 声明全局变量
int main() {
printf("%d\n", globalVar); // 使用全局变量
return 0;
}
示例 - 函数:
// 文件1:file1.c
void printHello() {
printf("Hello\n");
}
// 文件2:file2.c
extern void printHello(); // 声明函数
int main() {
printHello(); // 调用函数
return 0;
}
3. 使用场景
- 共享全局变量:在多个文件中共享同一个全局变量,而不是创建每个文件的局部副本。
- 函数的跨文件使用:允许在一个文件中定义一个函数,并在多个文件中调用它。
4. 注意事项
- 仅在需要在多个文件之间共享数据或函数时使用 extern。
- 避免过度使用全局变量,因为它们可能导致代码难以维护和测试。
- extern 变量默认具有外部链接性,意味着它们在整个程序中是可见的。
- 一定要确保全局变量在某个文件中具有定义。仅声明不足以为变量分配内存。
- extern 可以用于确保函数签名的一致性。
5. 优势
- 代码组织:有助于将全局变量和函数定义集中在一个文件中,使代码更容易管理。
- 模块化:通过将函数和全局变量的声明放在头文件中,可以促进代码的模块化和重用。
6. 示例 - 头文件
通常, extern 声明放在头文件中,头文件被包含在需要这些变量或函数的每个源文件中。
// header.h
extern int globalVar; // 声明全局变量
extern void printHello(); // 声明函数
// file1.c
#include "header.h"
int globalVar = 10; // 定义全局变量
void printHello() { /* 函数实现 */ }
// file2.c
#include "header.h"
int main() {
printHello(); // 使用函数
return 0;
}
通过合理使用 extern 关键字,您可以在多个源文件之间共享变量和函数,从而提高程序的组织性和模块化。
static关键字
1. 简介
static 是 C 语言中的一个关键字,用于影响变量的存储和可见性。它具有两个主要用途:控制变量的存储持续性(生命周期)和控制变量的作用域。
2. 静态局部变量
当 static 关键字用于局部变量时,它会改变该变量的存储持续性,使其在程序的整个运行期间保持存在,而不是仅在其定义的作用域内。这意味着即使它的作用域结束,该变量的值也不会丢失。
示例:
void function() {
static int count = 0; // 静态局部变量
count++;
printf("Count = %d\n", count);
}
int main() {
for (int i = 0; i < 5; i++) {
function(); // 每次调用都会增加 count 的值
}
return 0;
}
3. 静态全局变量
当 static 关键字用于全局变量时,它会限制变量的作用域,使其只在定义它的文件内可见。这有助于限制变量的可访问性,并防止名称冲突。
示例:
// 文件1:file1.c
static int count = 10; // 静态全局变量,仅在 file1.c 中可见
// 文件2:file2.c
extern int count; // 编译错误,file2.c 无法访问 file1.c 中的静态全局变量 count
4. 静态函数
当 static 关键字用于函数时,该函数的作用域被限制在定义它的文件中。这意味着这个函数只能在同一个源文件中被调用。
示例:
// 文件1:file1.c
static void helperFunction() {
printf("Helper function\n");
}
// 文件2:file2.c
void helperFunction(); // 编译错误,无法访问 file1.c 中的静态函数
5. 优势和用途
- 保持状态:静态局部变量在函数调用之间保留其值,适合于需要维护状态的情况。
- 限制作用域:静态全局变量和函数限制了变量和函数的可见性,减少了全局命名空间的污染。
- 模块化:静态函数可以用于实现模块化,隐藏内部实现细节,只公开必要的接口。
6. 注意事项
- 静态局部变量默认初始化为零。
- static 变量存储在程序的数据段,而不是堆栈。
- 过多使用全局静态变量可能导致代码难以维护,应当谨慎使用。
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)