C语言入门阶段02:C语言关键字

嗨喽,大家好,我是程序猿老王,程序猿老王就是我。

今天给大家讲一讲C语言关键字。

目录

一、数据类型关键字

1. 基本数据类型(5个)

2. 类型修饰关键字(4个)

3. 复杂类型关键字(5个)

4. 存储级别关键字(6个)

二、流程控制关键字

1. 跳转结构(4个)

2. 分支结构(5个)

3. 循环结构(3个)

三、C99新增关键字

四、C11新增关键字

五、各关键字用法


C语言的关键字是指被C语言编译器所预定义的具有特殊含义的标识符。这些关键字不能用作变量名、函数名或其他标识符的名称。以下是C语言中的全部32个关键字、C99和C11新增的关键字的含义及其用法:

ANSI标准定义的C语言关键字共32个:

void char int float double short long signed unsigned

struct union enum typedef sizeof  

auto static register extern const volatile

return continue break goto

if else switch case default for do while 

C99新增关键字:

_Bool _Complex _Imaginary inline restrict

C11新增关键字:

_Alignas  _Alignof  _Atomic  _Generic _Noreturn _Static_assert _Thread_local

C语言标准定义的32个关键字可以分为如下四类:

c42ef091062961097c0996958e018b61.png

一、数据类型关键字

1. 基本数据类型(5个)

void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果

char:字符型类型数据,属于整型数据的一种

int:整型数据,通常为编译器指定的机器字长

float:单精度浮点型数据,属于浮点数据的一种

double:双精度浮点型数据,属于浮点数据的一种

2. 类型修饰关键字(4个)

short:修饰int,短整型数据,可省略被修饰的int

long:修饰int,长整形数据,可省略被修饰的int

signed:修饰整型数据,有符号数据类型

unsigned:修饰整型数据,无符号数据类型

3. 复杂类型关键字(5个)

struct:结构体声明

union:共用体声明

enum:枚举声明

typedef:声明类型别名

sizeof:得到特定类型或特定类型变量的大小

4. 存储级别关键字(6个)

auto:指定为自动变量,由编译器自动分配及释放,通常在栈上分配

static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数

extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“

const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)

volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

二、流程控制关键字

1. 跳转结构(4个)

return:用在函数体中,返回特定值(或者是void值,即不返回值)

continue:结束当前循环,开始下一轮循环

break:跳出当前循环或switch结构

goto:无条件跳转语句

2. 分支结构(5个)

if:条件语句

else:条件语句否定分支(与if连用)

switch:开关语句(多重分支语句)

case:开关语句中的分支标记

default:开关语句中的“其他”分治,可选

3. 循环结构(3个)

for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件

do:do-while循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件

while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环

三、C99新增关键字

_Bool:用于定义布尔类型变量

_Complex:用于定义复数类型变量

_Imaginary:用于定义虚数类型变量

inline:是用来优化函数调用的关键字,它建议编译器将函数内联展开,从而避免了函数调用的开销,提高了程序的性能。当程序中频繁调用一个简单的函数时,使用inline可以将函数展开为一段代码直接插入到调用位置,避免了函数调用的开销

restrict:关键字用于告诉编译器,一个指针指向的内存空间是唯一的,没有其他指针指向同一块内存。使用restrict关键字可以帮助编译器进行更好的优化,提高程序的性能

四、C11新增关键字

_Alignas:用于指定内存对齐方式

_Alignof:用于获取类型的内存对齐方式

_Atomic:用于定义原子类型变量,支持并发访问

_Generic:用于根据参数类型选择不同的代码

_Noreturn:用于告诉编译器函数不会返回

_Static_assert:用于在编译时检查表达式的真假

_Thread_local:用于定义线程局部变量,每个线程都有一份独立的副本

五、各关键字用法

1. auto:用于定义自动变量,存储于函数的栈帧中

auto int num = 10;

2. break:用于中断循环或switch语句

for(int i=0; i<10; i++) {
    if(i == 5) {
        break;
    }
}

3. case:用于定义switch语句的分支

switch(num) {
    case 1:
        printf("num is 1\n");
        break;
    case 2:
        printf("num is 2\n");
        break;
    default:
        printf("num is not 1 or 2\n");
        break;
}

4.char:用于定义字符类型变量

char ch = 'A';

5. const:用于定义常量,值不可更改

const int MAX_NUM = 100;

6. continue:用于跳过循环中的某次迭代

for(int i=0; i<10; i++) {
    if(i == 5) {
        continue;
    }
    printf("%d ", i);
}

7. default:用于定义switch语句的默认分支

switch(num) {
    case 1:
        printf("num is 1\n");
        break;
    case 2:
        printf("num is 2\n");
        break;
    default:
        printf("num is not 1 or 2\n");
        break;
}

8. do:用于定义do-while循环

int i = 0;
do {
    printf("%d ", i);
    i++;
} while(i < 10);

9. double:用于定义双精度浮点数类型变量

double num = 3.14;

10. else:用于if语句的else分支

if(num > 0) {
    printf("num is positive\n");
} else {
    printf("num is not positive\n");
}

11. enum:用于定义枚举类型

enum COLOR {
    RED,
    GREEN,
    BLUE
};

12. extern:用于声明全局变量或函数,表示这些变量或函数在其他文件中定义

extern int num;
extern int add(int a, int b);

13. float:用于定义单精度浮点数类型变量

float num = 3.14f;

14. for:用于定义for循环

for(int i=0; i<10; i++) {
    printf("%d ", i);
}

15. goto:用于无条件跳转到指定的标签处

goto end;
    printf("This line will not be executed.\n");
end:
    printf("This line will be executed.\n");

16. if:用于定义条件语句

if(num > 0) {
    printf("num is positive\n");
}

17. int:用于定义整数类型变量

int num = 10;

18. long:用于定义长整数类型变量

long num = 1234567890L;

19. register:用于定义寄存器变量,表示变量存储在CPU的寄存器中

register int count = 0;

20. return:用于从函数中返回值

int add(int a, int b) {
    return a + b;
}

21. short:用于定义短整数类型变量

short num = 10;

22. signed:用于定义有符号数类型变量

signed int num = -10;

23. sizeof:用于获取变量或类型所占用的字节数

int arr[10];
printf("Size of arr: %d\n", sizeof(arr));

24. static:用于定义静态变量,生命周期与程序相同

static int count = 0;
static int add(int a, int b);

25. struct:用于定义结构体类型

struct Student {
    char name[20];
    int age;
};

26. switch:用于定义switch语句

switch(num) {
    case 1:
        printf("num is 1\n");
        break;
    case 2:
        printf("num is 2\n");
        break;
    default:
        printf("num is not 1 or 2\n");
        break;
}

27. typedef:用于定义类型别名

typedef int Age;
Age age = 20;

28. union:用于定义联合类型

union Data {
    int num;
    char ch;
};

29. unsigned:用于定义无符号数类型变量

unsigned int num = 10;

30. void:用于定义无返回值类型的函数或指针

void printNum(int num) {
    printf("%d\n", num);
}

31. volatile:用于告诉编译器变量值可能会在意料之外的时候被改变

volatile int num;

32. while:用于定义while循环

int i = 0;
while(i < 10) {
    printf("%d ", i);
    i++;
}

C99.1. _Bool:用于定义布尔类型变量

_Bool isTrue = 1;

C99.2. _Complex:用于定义复数类型变量

#include <complex.h>
_Complex double z = 1.0 + 2.0i;

C99.3. _Imaginary:用于定义虚数类型变量

#include <complex.h>
_Imaginary double z = 2.0i;

C99.4. inline:用来优化函数调用的关键字,它建议编译器将函数内联展开,从而避免了函数调用的开销,提高了程序的性能

inline int max(int a, int b) {
    return a > b ? a : b;
}
​
int main() {
    int a = 1, b = 2;
    int c = max(a, b);
    return 0;
}

C99.5. restrict:关键字用于告诉编译器,一个指针指向的内存空间是唯一的,没有其他指针指向同一块内存。使用restrict关键字可以帮助编译器进行更好的优化,提高程序的性能

void add(int n, int *restrict a, int *restrict b, int *restrict c) {
    for (int i = 0; i < n; i++) {
        c[i] = a[i] + b[i];
    }
}
​
int main() {
    int a[100], b[100], c[100];
    add(100, a, b, c);
    return 0;
}

C11.1. _Alignas:用于指定内存对齐方式

struct Student {
    char name[20];
    int age;
} __attribute__ ((__aligned__ (8)));

C11.2. _Alignof:用于获取类型的内存对齐方式

struct Student {
    char name[20];
    int age;
};
printf("Alignment of Student: %d\n", _Alignof(struct Student));

C11.3. _Atomic:用于定义原子类型变量,支持并发访问

#include <stdatomic.h>
_Atomic int num = 0;

C11.4. _Generic:用于根据参数类型选择不同的代码

#define print(x) _Generic((x), int: printf("%d", x), double: printf("%lf", x))

C11.5. _Noreturn:用于告诉编译器函数不会返回

_Noreturn void exitWithError() {
    printf("Error occurred.\n");
    exit(1);
}

C11.6. _Static_assert:用于在编译时检查表达式的真假

_Static_assert(sizeof(int) == 4, "int should be 4 bytes");

C11.7. _Thread_local:用于定义线程局部变量,每个线程都有一份独立的副本

_Thread_local int count = 0;

以上这些是C语言的全部关键字及其含义,希望可以对您有所帮助。

-END-


关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值