【嵌入式——C语言】关键字

数字类型相关

基本数据类型

类型说明占用字节(32位)
char声明字符型变量或函数返回值类型1字节
unsigned char声明无符号字符型变量或函数返回值类型1字节
signed char声明有符合字符型变量或函数返回值类型1字节
short声明短整型变量或函数2字节
unsigned short声明无符号短整型变量或函数2字节
int声明整型变量或函数4字节
unsigned int声明无符号整型变量或函数4字节
long声明长整型变量或函数返回值类型4字节
unsigned long声明无符号长整型变量或函数返回值类型4字节
float声明浮点型变量或函数返回值类型4字节
double声明双精度浮点型变量或函数返回值类型8字节
long int8字节
long long8字节
long double16字节

其他类型

类型说明
struct声明结构体类型
union声明共用体类型
enum声明枚举类型
signed声明有符号类型变量或函数
unsigned声明无符号类型变量或函数
void声明函数无返回值或无参数,声明无类型指针

struct 示例

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;  

union 示例

union U
{
	char a;
	int b;
}u; 

enum 示例

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

signed、unsigned 示例

signed char c = 'a';
unsigned char c = 'a';

存储相关

register

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量,在编译的时候告诉编译器这个是寄存器变量,尽量将其存储空间分配在寄存器.
注意:

  1. 定义的变量不一定真的在寄存器内
  2. cpu取数据的时候去寄存器中取,要比去内存中取速度快
  3. 因为寄存器比较宝贵,所以不能定义寄存器数组
  4. 只能修饰字符型和整形,不能修饰浮点型
  5. 不能对寄存器变量取地址,只有存放在内存中的数据才有地址

代码示例:

register int  miles;

static

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
代码示例:

static int a=5;

auto

auto 存储类是所有局部变量默认的存储类。定义在函数中的变量默认为 auto 存储类,这意味着它们在函数开始时被创建,在函数结束时被销毁
代码示例:

auto int month;

extern

extern 存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。
代码示例:
a.c文件

#include <stdio.h>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

b.c文件

#include <stdio.h>
 
extern int count;
 
void write_extern(void)
{
   printf("count is %d\n", count);
}

const

定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变,

  1. 修饰普通变量,代表只读的意思
const int a= 10;
  1. 修饰指针
    const char str*
    str指向的内存的内容不能通过str来修改,但是str的指向是可以改变的
    char buf12[20] = "helloworlk";
    const char* strc1 = buf12;
    *strc1 = 'w';//是错误的 表达式必须是可修改的左值
    printf("strc1=%s\n", strc1);
    
    char const str*
    str是只读变量,str不能指向其他地方,但是str指向的内存的内容是有可能可以修改的
    char buf11[20] = "helloworlk";
    char* const strc = buf11;
    printf("strc=%s\n", strc);//strc = helloworlk
    *strc = 'w';
    printf("strc=%s\n", strc);//strc = welloworlk
    strc = "123123";//是错误的
    
    const char const str*
    str不能指向别的地方,str指向的内存的内容也不能修改
    char buf13[20] = "helloworlk";
    const char* const strc2 = buf13;
    printf("strc2=%s\n", strc2);
    strc2 = "123123";//是错误的
    

C和C++中const的用法很相似,但是并不完全相同

  1. C++允许在声明数组大小时使用const整数,而C却不允许;
  2. C++的指针赋值检查更严格
const int y;
const int * p2 = &y;
int * p1;
p1 = p2; // C++中不允许这样做,但是C可能只给出警告,C++不允许把const修饰的指针赋给非const指针

控制语句相关

关键字备注
if条件语句
else条件语句否定分支(与 if 连用)
break跳出当前循环
continue结束当前循环,开始下一轮循环
for一种循环语句
while循环语句的循环条件
do循环语句的循环体
switch用于开关语句
case开关语句分支
goto无条件跳转语句
default开关语句中的"其它"分支

其他

sizeof
测量变量,数组的占用存储空间大小

sizeof(a);

typedef
重命名相关关键字

typedef short int INT16;
//INT16 b;和short int b;是一个效果

volatile
每次用volatile修饰的变量,都重新去内存中取,保证是最新的

volatile int vint;
  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值