【嵌入式】嵌入式C语言用法积累(长期更新)

1、C语言排序

#include<stdio.h> 
#include<stdlib.h>

int cmp(const void* _a, const void* _b) {
    int a = *(int*)_a, b = *(int*)_b;
    return a-b;//a-b是从左到右增大 
}

int main(){
    int nums[]={4,3,2,1}; 
    int numsSize =sizeof(nums)/sizeof(int);
    qsort(nums, numsSize, sizeof(int), cmp);
    return 0;
}

 

2、C语言二维数组创建方法

int** ans = malloc(sizeof(int*) * r);
for (int i = 0; i < r; i++)
    ans[i] = malloc(sizeof(int) * c);

 

3、C语言51单片机unsigned char输出方法

u8 save_value=52;
printf("%bd\n",save_value);    //52 正确输出
printf("%d\n",save_value);    //13312 错误输出 为52*256

原因51单片机 串口用 printf输出 ,当输出的数据类型是unsigned char的时候 电脑收到的数自动乘上了256_百度知道 (baidu.com)

 

4、C语言哈希表使用方法

(74条消息) C开源hash代码uthash的用法总结(1)_逍遥子_的博客-CSDN博客_uthash 多个key

C语言uthash介绍 - zivlv - 博客园 (cnblogs.com)

 

5、正则表达式

(74条消息) 正则表达式(全)_懂点计算机的小白的博客-CSDN博客

 

6、关于memset memcpy等mem系列的内存操作指令

能不用尽量不用吧,编程一时爽,BUG火葬场,出了问题也不知道怎么回事

 

7、define用法

define可以嵌套头文件使用,例如main文件include A,A文件include B,main可以使用B中的define

define A的值取决于使用该define A时之前一次define A的值,如果两次define A的值不同,编译器会警告,若相同则不会警告。

 

8、define注意事项

代码中出现 if define ... else ... endif 的宏时需要特别注意include头文件的顺序,因为此时先后顺序会改变编译结果。

每个.c文件都是先单独编译的,如果A.c文件和B.c文件都使用同一个头文件,后A中修改了define X的值,不会影响到B.c文件的值,此时A.c和B.c文件将输出不同的X值

 

9、数组内写结构体方法

RegInfo_t regCentInfo[] = 
{
	/* 控制器1 ; 服务 2*/
	{
		.appID         =  0x01,
		.funID         =  SERV_QUE,
		.servID        =  0X02,
	},
	/* 控制器2 ; 服务 5*/
	{
		.appID         =  0x02,
		.funID         =  SERV_QUE,
		.servID        =  0X05,
	},
};

 

10、函数指针

typedef struct cJSON_Hooks {
      void *(*malloc_fn)(size_t sz);//返回值是void*,输入为size_t sz,名为malloc_fn的函数指针
      void (*free_fn)(void *ptr);//返回值是void,输入为void *ptr,名为free_fn的函数指针
} cJSON_Hooks;

cJSON_Hooks->malloc_fn=malloc;//指针指向malloc函数

 

posted @ 2023-02-17 14:02  海底淤泥  阅读(167)  评论(0编辑  收藏  举报