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

2023-12-13 03:36:31

数字类型相关

基本数据类型

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

其他类型

类型说明
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";//是错误的
    

控制语句相关

关键字备注
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;

文章来源:https://blog.csdn.net/weixin_39723539/article/details/134959794
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。