C语言如何定义蚂蚁的颜色,c语言中的关键字

本文详细介绍了C语言中的32个关键字,包括数据类型、存储级别、流程控制等方面,并重点讲解了volatile关键字的作用,指出其在并行设备、中断服务子程序和多线程应用中的重要性。同时,列举了volatile使用不当可能导致的问题,并给出了相关面试问题和答案,揭示了volatile在嵌入式编程中的核心地位。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gifc语言中的关键字

附录2 C语言中的关键字 C 语言共有 32个关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile 类型修 饰符 while 说明: 1、关键字 auto 用于说明自动变量,由于变量声明时默认情况下就是自动变量,所以很少 使用。 2、volatile(易变的)表示该变量不经过赋值,其值也可能被改变(例如表示时钟的变 量、表示通信端口的变量等) 。 关键字就是被 C 语言本身使用的,不能作其它用途使用的字。关键字不能用作变量名,函 数名。 C 语言中的关键字 auto :声明自动变量 一般不使用 double :声明双精度变量或函数 float:声明浮点型变量或函数 int: 声明整型变量或函数 short :声明短整型变量或函数 long :声明长整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else :条件语句否定分支(与 if 连用) switch :用于开关语句 case:开关语句分支 enum :声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名 char :声明字符型变量或函数 extern:声明变量是在其他文件正声明(也可以看做是引用变量) return :子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const :声明只读变量 unsigned:声明无符号类型变量或函数 signed:生命有符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句(可意会不可言传) void :声明函数无返回值或无参数,声明无类型指针 default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do :循环语句的循环体 while :循环语句的循环条件 static :声明静态变量 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1 数据类型关键字 A.基本数据类型( 5 个) void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char :字符型类型数据,属于整型数据的一种 int :整型数据,通常为编译器指定的机器字长 float :单精度浮点型数据,属于浮点数据的一种 double :双精度浮点型数据,属于浮点数据的一种 B .类型修饰关键字( 4 个) short :修饰 int,短整型数据,可省略被修饰的 int。 long :修饰 int,长整形数据,可省略被修饰的 int。 signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型 C .复杂类型关键字( 5 个) struct :结构体声明 union :共用体声明 enum :枚举声明 typedef :声明类型别名 sizeof :得到特定类型或特定类型变量的大小 D .存储级别关键字( 6 个) auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为 文件内部 register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以 修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中, 提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const :与 volatile 合称“cv 特性”,指定变量不可被当前线程 /进程改变(但有可 能被系统或其他线程 /进程改变) volatile :与 const 合称“cv 特性”,指定变量的值有可能会被系统或其他进程 / 线程改变,强制编译器每次从内存中取得该变量的值 2 流程控制关键字 A .跳转结构( 4 个) return :用在函数体中,返回特定值(或者是 void 值,即不返回值) continue :结束当前循环,开始下一轮循环 break :跳出当前循环或 switch 结构 goto :无条件跳转语句 B .分支结构( 5 个) if :条件语句,后面不需要放分号 else :条件语句否定分支(与 if 连用) switch :开关语句(多重分支语句) case :开关语句中的分支标记 default :开关语句中的 “其他”分支,可选。 2.C 语言中的 volatile 关键字: 一个定义为 volatile 的变量是说这个变量可能会被意想不到的改变,这样,编译器就不会去 假设这个变量的值了。精确的说,就是优化器在用到这个变量时,必须每次都小心的重新 从地址中读取这个变量的值,而不是使用保存在寄存器里的备份。 下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的 问题。嵌入式系统程序员经常同硬件、中断、RTOS等打交道,所用这些都要求volatile变量。不懂得 volatile内容将会带来灾难。 假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家 伙是不是直正懂得volatile完全的重要性。 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 2). 一个指针可以是volatile 吗?解释为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr; } 下面是答案: 1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。3). 这段代码的有个恶作剧。这段代码的目的是用来返指针(*ptr)指向值的平方,但是,由于 *ptr指向一个volatile型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; } 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所 期望的平方值!正确的代码如下: long square(volatile int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值