【C语言】(5)关键字
liebian365 2025-01-04 21:17 44 浏览 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 变量存储在程序的数据段,而不是堆栈。
- 过多使用全局静态变量可能导致代码难以维护,应当谨慎使用。
相关推荐
- 深度解密epoll 如何工作的?(epoll基本处理流程)
-
epoll...
- 大乐透第19082期:头奖开出7注1000万分落六地 奖池41亿元
-
2019年7月17日晚开奖的体彩超级大乐透第19082期开奖号码为:前区06、18、20、21、31,后区03、04。本期大乐透前区号码五区比为1:0:3:0:1,二区和四区号码没有给出。当期前区和值...
- 【开奖】4月27日周六:福彩、体彩(2021年4月27日体彩开奖结果)
-
4月27日开奖福彩3D第2019110期:61222选5第2019110期:0812202122排列3第19110期:303排列5第19110期:30305大乐透第19047期:0304...
- “红狒狒”落户哈尔滨铁路局(哈尔滨铁路红肠)
-
这几天,“红人”“红狒狒”在牡丹江机务段可引起了不小的轰动,众粉丝争相与其拍照留念,在该段人气爆棚!“红狒狒”到底何许人也?“红狒狒”,中文名:和谐3D型电力机车;绰号:红狒狒、番茄;制造商:大连机...
- 2D、3D、2.5D,做游戏还是搞噱头?玩家都晕了
-
前言游戏类型就像某种潮流,一种流行罢,另一种接棒成为主流。前两年的新作大多以“开放世界”为标签,在追求纯沙盒的过程中打造出一些细致的分类,比如说“类GTA沙盒”。诚然,纯碎的沙盒游戏并不多见,业内只有...
- 《战神4》PC版宣传片发布 GTX 1070即可60帧畅玩
-
在今年10月的时候索尼PlayStation官方正式宣布圣莫尼卡2018年的《战神4》将于2022年1月14日推出PC版本,官方在今天公布了一段PC版宣传片,并且公开了游戏的配置需求。下面让我们一起来...
- 男星深情好丈夫形象崩塌,半夜搂美女坐大腿,举止亲密
-
近日,于晓光被拍到深夜在酒吧玩,结束后与一名女子一起上车离开。上车后,女子直接坐在了他腿上,他也顺势搂着美女,美女满脸笑容地坐在他腿上玩手机离开。可能有人会好奇,于晓光是谁呢?于晓光是韩国艺人秋瓷炫的...
- d3d12dll丢失怎么修复?d3d12dll加载失败怎么解决?
-
d3d12.dll丢失怎么修复?d3d12.dll加载失败怎么解决?很多朋友想要运行游戏的时候都会遇到这个问题,这种情况该怎么办呢?今天系统之家小编给朋友们讲讲具体的解决方法,操作其实还蛮简单的。...
- 许多玩家反馈《生化4RE》PC一直崩溃 无法进入游戏
-
今日(3月24日),卡普空《生化危机4:重制版》正式发售,然而有部分PC玩家遇到了游戏崩溃等问题。很多玩家在贴吧发帖称游戏遇到了严重的崩溃问题,且经常反复,报错代码普遍为FatalD3Derror...
- 微软正式推出适用于WSL Linux的D3D12 GPU视频加速技术
-
今天,微软正式向WindowsSubsystemforLinux(WSL)用户发布了Direct3D12GPU视频加速支持。在微软通过WSL允许在Linux下使用Open...
- 《怪物猎人:崛起》曙光系统报错“Fatal d3d error”的解决办法
-
《怪物猎人:崛起》曙光系统报错“Fatald3derror”的解决办法不少小伙伴反应《怪物猎人:崛起》DLC曙光预载以后打不开游戏,出现了Fatald3derror类似的错误代码,这类问题的解...
- Mac+双屏,前端程序员的专业配置 - Loctek 乐歌 D3D 双屏电脑显示器支架
-
做FE也有一段日子了,电脑屏幕每天在设计稿、浏览器、IDE、即时通讯工具、Terminal、邮箱之间切换。虽然mac的工作区带来了很多灵活,但是依然略显不足。于是入手支架,把公司配的电脑和显示器发挥起...
- RPC 的原理和简单使用(rpc详解)
-
RPC的概念RPC,RemoteProcedureCall,翻译成中文就是远程过程调用,是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数。在调用的...
- 大厂开源的golang微服务rpc框架 — kitex
-
提前rpc估计所有的开发同学都知道,不知道的也无所谓,毕竟我也好几年没用了,今天带大家在复习一下。RPC(RemoteProcedureCall):远程过程调用,...
- 干货!一文掌握Protobuf所有语言所有用法,快收藏
-
说实话,Protobuf这个库,让人相见时难别亦难,东风无力百花残,每次等到要用它的时候,总感觉还没有完全掌握它的用法,而实际上等去百度或者谷歌的时候,教程都是多么的凌乱不堪。学会它,最直接关系到的,...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)