【C语言】(5)关键字

C语言中的关键字是预先保留的标识符,具有特定的含义。程序员在定义变量、函数名等标识符时不能使用这些关键字。本文将对C语言中的关键字进行详细的介绍,并介绍C99和C11标准中新增的关键字。

标准关键字

C语言标准定义的关键字主要包括数据类型、流程控制、函数和数据结构定义等方面。下表列出了这些关键字及其说明:

关键字说明
auto声明自动变量,现在很少使用
break跳出最内层的循环或switch语句
caseswitch语句中的一个分支
char声明字符型变量或函数返回值类型
const声明常量,防止变量的值被修改
continue继续下一次循环的迭代
defaultswitch语句中的默认分支
dodo-while循环的循环体
double声明双精度浮点型变量或函数返回值类型
elseif语句的否定分支
enum声明枚举类型
extern声明外部变量或函数
float声明浮点型变量或函数返回值类型
forfor循环语句
goto无条件跳转语句
if条件语句
int声明整型变量或函数
long声明长整型变量或函数返回值类型
register声明寄存器变量,现在很少使用
return函数返回语句
short声明短整型变量或函数
signed声明有符号类型变量或函数
sizeof计算数据类型或变量的长度
static声明静态变量,限定变量的作用域
struct声明结构体类型
switch开关语句
typedef为数据类型定义别名
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明无返回值的函数或无类型的指针
volatile声明易变变量,防止编译器优化
whilewhile循环语句

C99 新增关键字

C99标准引入了一些新的关键字,以支持新的语言特性,如布尔类型、复数类型和内联函数等。

关键字说明
_Bool布尔类型,值为true或false
_Complex复数类型
_Imaginary虚数类型
inline声明内联函数
restrict限定指针,表示指针是访问数据的唯一方式

C11 新增关键字

C11标准进一步增加了几个关键字,以增强语言的功能和安全性。

关键字说明
_Alignas指定变量或类型的对齐方式
_Alignof查询类型或变量的对齐要求
_Atomic声明原子类型变量
_Generic根据表达式类型选择表达式
_Noreturn表示函数不会返回到调用者
_Static_assert编译时断言,用于编译时条件检查
_Thread_local声明线程局部存储期的变量

了解和熟悉这些关键字对于编写有效和符合标准的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 变量存储在程序的数据段,而不是堆栈。
  • 过多使用全局静态变量可能导致代码难以维护,应当谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游码客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值