[嵌入式C][入门篇] 快速掌握基础5 (标准库)

发布时间:2024年01月08日

开发环境:

  1. 网页版:跳转
  2. 本地开发(Vscode):跳转

一、 简介

C 标准库是一组 C 内置函数、常量和头文件。
嵌入式软件常用: <stdio.h>、<stdint.h>、<string.h>、<stdlib.h>、<stdbool.h>、<math.h>等等。

二、 #include <stdio.h>

stdio .h 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。

1. 库变量 (常用)

序号变量描述
1size_t这是无符号整数类型,它是 sizeof 关键字的结果。

2. 库宏(常用)

序号描述
1NULL这个宏是一个空指针常量的值。(常用)

3. 库函数 (常用)

序号函数描述
1int sprintf(char *str, const char *format, …)发送格式化输出到字符串。
2int snprintf(char *str, size_t size, const char *format, …)格式字符串到 str 中。
3int printf(const char *format, …)发送格式化输出到标准输出。

三、 #include <stdint.h> 变量命名

名称源头描述
int8_tchar字符
uint8_tunsigned char无符号字符
int16_tshort短整型
uint16_tunsigned short无符号短整型
int32_tint整型
uint32_tunsigned int无符号整型
int64_tlong long长整型
uint64_tunsigned long long无符号长整型

四、 #include <string.h> 字符串相关

定义了一个变量类型、一个宏和各种操作字符数组的函数。

1. 库变量 (常用)

序号变量描述
1size_t这是无符号整数类型,它是 sizeof 关键字的结果。

2. 库宏(常用)

序号描述
1NULL这个宏是一个空指针常量的值。

3. 库函数

序号函数描述使用情况
1void *memchr(const void *str, int c, size_t n)在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
2int memcmp(const void *str1, const void *str2, size_t n)把 str1 和 str2 的前 n 个字节进行比较。常用
3void *memcpy(void *dest, const void *src, size_t n)从 src 复制 n 个字符到 dest。常用
4void *memmove(void *dest, const void *src, size_t n)另一个用于从 src 复制 n 个字符到 dest 的函数。支持内存重叠!常用
5void *memset(void *str, int c, size_t n)复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。常用
6char *strcat(char *dest, const char *src)把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。常用
7char *strncat(char *dest, const char *src, size_t n)把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。常用
8char *strchr(const char *str, int c)在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
9int strcmp(const char *str1, const char *str2)把 str1 所指向的字符串和 str2 所指向的字符串进行比较。不安全常用
10int strncmp(const char *str1, const char *str2, size_t n)把 str1 和 str2 进行比较,最多比较前 n 个字节。安全常用
11int strcoll(const char *str1, const char *str2)把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
12char *strcpy(char *dest, const char *src)把 src 所指向的字符串复制到 dest。不安全
13char *strncpy(char *dest, const char *src, size_t n)把 src 所指向的字符串复制到 dest,最多复制 n 个字符。安全常用
16size_t strlen(const char *str)计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。常用
18char *strrchr(const char *str, int c)在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
19size_t strspn(const char *str1, const char *str2)检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
20char *strstr(const char *haystack, const char *needle)在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。常用
21char *strtok(char *str, const char *delim)分解字符串 str 为一组字符串,delim 为分隔符。常用

五、 #include <stdlib.h> 功能函数相关

序号函数描述
1double atof(const char *str)把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
2int atoi(const char *str)把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
3long int atol(const char *str)把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
4double strtod(const char *str, char **endptr)把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
5long int strtol(const char *str, char **endptr, int base)把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
6unsigned long int strtoul(const char *str, char **endptr, int base)把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。
7void *calloc(size_t nitems, size_t size)分配所需的内存空间,并返回一个指向它的指针。(内存清零)
8void free(void *ptr)释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
9void *malloc(size_t size)分配所需的内存空间,并返回一个指向它的指针(内存内容随机)。
10void *realloc(void *ptr, size_t size)尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
11void abort(void)使一个异常程序终止。[Linux]
12int atexit(void (*func)(void))当程序正常终止时,调用指定的函数 func。[Linux]
13void exit(int status)使程序正常终止。[Linux]
14char *getenv(const char *name)搜索 name 所指向的环境字符串,并返回相关的值给字符串。[Linux]
15int system(const char *string)由 string 指定的命令传给要被命令处理器执行的主机环境。[Linux]
16void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))执行二分查找。
17void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void))数组排序。
18int abs(int x)返回 x 的绝对值。
19div_t div(int numer, int denom)分子除以分母。
20long int labs(long int x)返回 x 的绝对值。
21ldiv_t ldiv(long int numer, long int denom)分子除以分母。
22int rand(void)返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
23void srand(unsigned int seed)初始化随机数发生器,seed一般是用time(NULL)。

六、 #include 布尔类型 (bool)

1. 库变量 (常用)

序号变量描述
1booltrue false

七、 #include <math.h> 数学公式

序号函数描述
1double acos(double x)返回以弧度表示的 x 的反余弦。
2double asin(double x)返回以弧度表示的 x 的反正弦。
3double atan(double x)返回以弧度表示的 x 的反正切。
4double atan2(double y, double x)返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。
5double cos(double x)返回弧度角 x 的余弦。
6double cosh(double x)返回 x 的双曲余弦。
7double sin(double x)返回弧度角 x 的正弦。
8double sinh(double x)返回 x 的双曲正弦。
9double tanh(double x)返回 x 的双曲正切。
10double exp(double x)返回 e 的 x 次幂的值。
11double frexp(double x, int *exponent)把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。
12double ldexp(double x, int exponent)返回 x 乘以 2 的 exponent 次幂。
13double log(double x)返回 x 的自然对数(基数为 e 的对数)。
14double log10(double x)返回 x 的常用对数(基数为 10 的对数)。
15double modf(double x, double *integer)返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。
16double pow(double x, double y)返回 x 的 y 次幂。
17double sqrt(double x)返回 x 的平方根。
18double ceil(double x)返回大于或等于 x 的最小的整数值。
19double fabs(double x)返回 x 的绝对值。
20double floor(double x)返回小于或等于 x 的最大的整数值。
21double fmod(double x, double y)返回 x 除以 y 的余数。

八、 #include <limits.h> 各种变量类型的范围

1. 库宏(常用)

描述
CHAR_BIT8定义一个字节的比特数。
SCHAR_MIN-128定义一个有符号字符的最小值。
SCHAR_MAX127定义一个有符号字符的最大值。
UCHAR_MAX255定义一个无符号字符的最大值。
CHAR_MIN0定义类型 char 的最小值,如果 char 表示负值,则它的值等于 SCHAR_MIN,否则等于 0。
CHAR_MAX127定义类型 char 的最大值,如果 char 表示负值,则它的值等于 SCHAR_MAX,否则等于 UCHAR_MAX。
MB_LEN_MAX1定义多字节字符中的最大字节数。
SHRT_MIN-32768定义一个短整型的最小值。
SHRT_MAX+32767定义一个短整型的最大值。
USHRT_MAX65535定义一个无符号短整型的最大值。
INT_MIN-2147483648定义一个整型的最小值。
INT_MAX2147483647定义一个整型的最大值。
UINT_MAX4294967295定义一个无符号整型的最大值。
LONG_MIN-9223372036854775808定义一个长整型的最小值。
LONG_MAX9223372036854775807定义一个长整型的最大值。
ULONG_MAX1.8446744e+19定义一个无符号长整型的最大值。

九、 #include <signal.h> 原子变量(中断和多线程)

定义了一个变量类型 sig_atomic_t,可实现同步操作。

1. 库变量 (常用)

序号变量描述
1sig_atomic_t这是 int 类型,在信号处理程序中作为变量使用。
它是一个对象的整数类型,该对象可以作为一个原子实体访问,
即使存在异步信号时,该对象可以作为一个原子实体访问。

2. 库宏(常用)

void (*signal(int sig, void (*func)(int)))(int)
宏(参数func)描述
SIG_DFL默认的信号处理程序。
SIG_ERR表示一个信号错误。
SIG_IGN忽视信号。
宏(raise的参数)描述
SIGABRT程序异常终止。
SIGFPE算术运算出错,如除数为 0 或溢出。
SIGILL非法函数映象,如非法指令。
SIGINT中断信号,如 ctrl-C。
SIGSEGV非法访问存储器,如访问不存在的内存单元。
SIGTERM发送给本程序的终止请求信号。

3. 库函数 (常用)

序号函数描述
1void (*signal(int sig, void (*func)(int)))(int)该函数设置一个函数来处理信号,即信号处理程序。
2int raise(int sig)该函数会促使生成信号 sig。sig 参数与 SIG 宏兼容。

十、 #include <stdarg.h> 可变参数

1. 库变量 (常用)

序号变量描述
1va_list这是一个适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型。

2. 库函数 (常用)

序号函数描述
1void va_start(va_list ap, last_arg)这个宏初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
2type va_arg(va_list ap, type)这个宏检索函数参数列表中类型为 type 的下一个参数。
3void va_end(va_list ap)这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。

十一、 #include <time.h> 可变参数

1. 库变量 (常用)

序号变量描述
1size_t是无符号整数类型,它是 sizeof 关键字的结果。
2clock_t这是一个适合存储处理器时间的类型。
3time_t is这是一个适合存储日历时间的类型。
4struct tm这是一个用来保存时间和日期的结构。
struct tm {
int tm_sec; // 秒,范围从 0 到 59
int tm_min; // 分,范围从 0 到 59 /
int tm_hour; // 小时,范围从 0 到 23
int tm_mday; //一月中的第几天,范围从 1 到 31
int tm_mon; // 月,范围从 0 到 11
int tm_year; // 自 1900 年起的年数
int tm_wday; // 一周中的第几天,范围从 0 到 6
int tm_yday; // 一年中的第几天,范围从 0 到 365
int tm_isdst; // 夏令时
};

2. 库宏(常用)

宏(参数func)描述
1NULL
2CLOCKS_PER_SEC

3. 库函数 (常用)

序号函数描述
1char *asctime(const struct tm *timeptr)返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。
2clock_t clock(void)返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。
3char *ctime(const time_t *timer)返回一个表示当地时间的字符串,当地时间是基于参数 timer。
4double difftime(time_t time1, time_t time2)返回 time1 和 time2 之间相差的秒数 (time1-time2)。
5struct tm *gmtime(const time_t *timer)timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
6struct tm *localtime(const time_t *timer)timer 的值被分解为 tm 结构,并用本地时区表示。
7time_t mktime(struct tm *timeptr)把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
9time_t time(time_t *timer)计算当前日历时间,并把它编码成 time_t 格式。
文章来源:https://blog.csdn.net/qq_29246181/article/details/135443279
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。