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

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

  • 数字类型相关
    • 基本数据类型
    • 其他类型
  • 存储相关
    • register
    • static
    • auto
    • extern
    • const
  • 控制语句相关
  • 其他

数字类型相关

基本数据类型

类型 说明 占用字节(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 int 8字节
long long 8字节
long double 16字节

其他类型

类型 说明
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 
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

b.c文件

#include 
 
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;

你可能感兴趣的:(c语言,开发语言,嵌入式硬件,物联网,iot)