侧边栏壁纸
博主头像
Lee's World 博主等级

长安乐,多喜宁

  • 累计撰写 23 篇文章
  • 累计创建 2 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

ESP32S3学习1-C语言回顾

Administrator
2025-03-03 / 0 评论 / 0 点赞 / 33 阅读 / 0 字

开始学习ESP32,今天先回顾一下一些知识点

位操作

c语言躲不开的位操作,很多数据处理都需要用到位操作

运算符 含义 速记
& 按位与 全1为1
| 按位或 有1为1
^ 按位异或 10为1
~ 按位取反 翻转
<< 左移 左移,右侧补0
>> 右移 右移,左侧按符号位填充

实例

int a = 60;//00111100
int b = 13;//00001101
int c = a&b;//00001100
int d = a|b;//00111101
int e = a^b;//00110001
int f = ~a;//11000011
int g = a<<2//11110000
int h = a>>2//00001111

宏定义

宏定义是预处理指令的一部分,宏可以是一个简单的常量、一个带有参数的表达式或是一个代码块。使用宏可以在编译前替换代码中的特定部分,从而实现代码的重用、简化和提高可读性。

无参数的宏定义
#define a 1234.5
带参数的宏定义,可以输入一个或多个参数,返回一个表达式
#define a(x) ((x)*(x))
代码块宏定义
#define SWAP(a, b) do { \
	typeof(a) temp = a; \
	a = b; \
	b = temp; \
} while (0)
取消宏定义
#undef a
  • 宏定义只是简单的文本替换,没有类型检查或作用域限制。
  • 宏可能会因为参数的运算符优先级导致预期之外的行为,所以使用时要特别小心。
  • 宏定义可能会导致代码膨胀,因为每个宏的使用都会导致相同代码的重复插入。
  • 避免在宏中使用复杂的表达式或逻辑,因为这会增加代码阅读和维护的难度。
  • 使用宏时要谨慎,以避免出现意外的副作用或难以调试的错误。

外部申明extern

extern 其实就是起到一个被文件外的文件调用的作用

extern int a=9;
  • extern 只能用于声明变量或函数,不能用于定义。定义会分配内存空间,而声明不会
  • 当你在一个源文件中定义了一个变量或函数,并想在另一个源文件中使用它时,你需
    要在第二个源文件中使用 extern 进行声明
  • 外部声明必须在使用变量或函数之前进行
  • 在链接阶段,链接器会查找所有extern声明的定义,如果找不到,就会出现链接错误
  • 如果多个源文件定义了同一个extern变量,那么链接器会将其视为错误,因为同一个变
    量只能有一个定义。但是,多个源文件可以包含同一个extern函数的声明,因为这个函
    数可能在不同的地方有不同的实现

类型别名typedef

用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义

typedef unsigned char      uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int       uint32_t;

结构体struct

结构体就是一堆变量的集合,结构体中的成员变量的作用一般都是相互关联的,

struct man
{
	uint8_t name;
	uint8_t hight;
}

如果变量定义过多,如果某几个变量是用来描述某一个对象,可以考虑将这些变量定义在结构体中,这样也许可以提高你的代码的可读性

指针*

指针是一个值指向地址的变量(或常量),其本质是指向一个地址,从而可以访问一片内存区域,可以使不同代码共享同一片内存数据,也可以用作复杂的链接性的数据结构的构建,比如链表,链式二叉树等,而且,有些地方必须使用指针才能实现,比如内存管理等。

char *str = "hello world";

上面展示了一个指针的创建,这个时候,str就变成了一串数字,用于指向内存地址,通过

*str

可以读取数据,通过&可以指向地址

0

评论区