首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c标准库总结

isalpha  int isalpha ( int c ); 检查c是否为字母。为假返回0,否则返回其它值。  isblank  int isblank ( int c ); 检查c是否是空白字符。...isgraph  int isgraph ( int c ); 检查c是否有图形表示法。带有图形表示法的字符是除了空白字符(比如 ’ ')以外的所有可打印的字符。为假返回0,否则返回其它值。 ...可变参数的函数在参数列表的末尾使用省略号(…)定义。 例如:  返回类型 函数名称(参数1, ...) 要访问附加的参数通过宏va_start,va_arg,va_end来实现。 ...打印错误消息 宏  宏功能BUFSIZ缓冲尺寸EOF文件结束FILENAME_MAX文件名最大长度FOPN_MAX能同时打开的文件数量L_tmpnam字符数组可以存储的由tmpnam函数创建的临时文件名的最大长度...宏  宏描述STD_UTF_16如果定义了此值则说明char16_t有UTF-16编码STD_UTF_32如果定义了此值则说明char32_t有UTF-32编码 函数  函数描述c16rtomb将16位字符转换成多字节序列

1.2K30

c标准库总结

isalpha  int isalpha ( int c ); 检查c是否为字母。为假返回0,否则返回其它值。  isblank  int isblank ( int c ); 检查c是否是空白字符。...isgraph  int isgraph ( int c ); 检查c是否有图形表示法。带有图形表示法的字符是除了空白字符(比如 ’ ')以外的所有可打印的字符。为假返回0,否则返回其它值。 ...可变参数的函数在参数列表的末尾使用省略号(…)定义。 例如:  返回类型 函数名称(参数1, ...) 要访问附加的参数通过宏va_start,va_arg,va_end来实现。 ...打印错误消息 宏  宏功能BUFSIZ缓冲尺寸EOF文件结束FILENAME_MAX文件名最大长度FOPN_MAX能同时打开的文件数量L_tmpnam字符数组可以存储的由tmpnam函数创建的临时文件名的最大长度...宏  宏描述STD_UTF_16如果定义了此值则说明char16_t有UTF-16编码STD_UTF_32如果定义了此值则说明char32_t有UTF-32编码 函数  函数描述c16rtomb将16位字符转换成多字节序列

1.4K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从CW32L010看HAL库封装方式

    简化代码:联合体使得通过不同的访问方式(整个寄存器或按位字段)来控制硬件寄存器变得更加简单和清晰。 内存节省:因为联合体中的所有成员共享同一块内存,因此它可以有效地节省内存空间。...在嵌入式系统中,内存通常非常宝贵,使用联合体可以帮助减少内存占用。 对每一位给了掩码和位置 ADC_CR_BGREN_Pos:这是一个位位置(bit position)的宏。...它通过宏 bv(n) 定义了从第 0 位到第 31 位的每一个位掩码。这些宏可以用来设置、清除、检测或修改整数中相应位的值。 bv(n) 宏通过将常量 1 左移 n 位来创建一个位掩码。...宏内部使用了 ||(逻辑或)运算符,检查 MODE 是否等于 ADC_ConvertMode_Single 或 ADC_ConvertMode_Continuous。...我们通过C语言的结构体来把相关外设的寄存器组织在一起方便控制。 接着我们又给了每一位的位置宏和掩码宏,来方便位运算控制。 最后进一步抽象,给出了对应的头文件里面的结构体,是对外设的进一步抽象。

    10010

    内联函数 c-浅谈内联函数与宏定义的区别详解

    用内联取代宏:   1.内联函数在运行时可调试,而宏定义不可以;   2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;   3.内联函数可以访问类的成员变量,...宏定义语句的书写格式有过分的讲究, MAX与括号之间不能有空格,所有的参数都要   放在括号里。...幸运的是,通过一个内联函数可以得到所有宏的替换效能和 所有可预见的状态以及常规函数的类型检查:   inline int MAX(int a,int b)   {   return a>b?...在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。...(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。

    71540

    同步STM32的SAI外设传输普通数据

    这么多数据要加CRC的,也就是要加个头 AD7779、AD7771都是这样的 为了快速的移动数据使用了大量的DMA外设 SAI外设使用中断来启动 SD数据线 模式是非同步的从设备,就是等着数据来 这个就是一些设置...在ADC的数据传输的时候是有个信号的 条件判断: 检查是否开启了ADC和SAI读取功能。...检查是否开启了UART7文本输出。...if (SAI_RxStart): 这行代码检查了一个标志位SAI_RxStart,用于判断是否需要开始新的数据采集周期。 SAI_DMA_INT_SHIFT: 这个标志位表示是否启用了DMA中断。...对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB优先)。 另外的外设,就没有时钟线了 是使用的第一个的时钟线 同理 这个是时钟树上面的位置 这个就是IO的输入的口

    14910

    C语言从入门到实战——预处理详解

    条件编译:通过使用#ifdef、#ifndef、#endif、#if、#elif、#else等指令,可以根据条件编译开关的设置决定是否编译某段代码,从而实现不同平台或配置下的代码选择。...一、预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。...当编译器符合 ANSI C 标准时,它会定义 STDC 宏,其值常为 1。编写 C 代码时,可以使用该宏来判断编译器是否符合 ANSI C 标准,从而使用标准的 C 语言特性。...例如,有些编译器可能支持非标准的 C 语言扩展,当编写需要兼容 ANSI C 的代码时,可以使用条件编译来控制是否使用这些扩展。...在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。

    60711

    Linux kernel中常见的宏整理

    宏的一些奇技淫巧: https://gaomf.cn/2017/10/06/C_Macro/ 以下是整理的一些linux kernel中的常见宏,由于不同体系架构,或者不同模块的宏定义不同,只挑选了其中容易看懂的宏作为记录...避免使用goto,对程序流进行统一的控制,使用break跳出 避免空宏引起的warning 定义一个单独的函数块来实现复杂的操作 0x01 常见宏整理 __CONCAT宏 "##"用于粘贴两个参数,"#...typecheck宏 宏typecheck用于检查x是否为type类型,如果不是会抛出(warning: comparison of distinct pointer types lacks a cast...内核开发者通过将系统调用的所有输入参数都先转化成long类型(64位),再强制转化到相应的类型来规避这个漏洞。...linux 内核的一些错误码,以它们的负数来作为函数返回值,简单地使用大于等于-4095的虚拟地址来分别表示相应的错误码。

    1.7K20

    CPU亲和性设置视频解析,代码示例 sched_setaffinity sched_getaffinity, CPU_ZERO、CPU_SET、CPU_IS

    2.2 CPU_ZERO、CPU_SET、CPU_ISSET、CPU_CLRCPU_ZEROCPU_ZERO宏用于初始化cpu_set_t类型的变量,将其所有位都设置为0。...cpu_set_t cpuset; CPU_ZERO(&cpuset); // 初始化cpuset,所有位都设为0CPU_SETCPU_SET宏用于将cpu_set_t类型变量中指定的CPU核心对应的位设置为...CPU_CLR(1, &cpuset); // 将cpuset中CPU 1对应的位清除CPU_ISSETCPU_ISSET宏用于检查cpu_set_t类型变量中指定的CPU核心对应的位是否被设置(即是否为...CPU编号 if (CPU_ISSET(i, &get_cpuset)) { // 检查get_cpuset中对应CPU的位是否被设置 printf("CPU...CPU编号 if (CPU_ISSET(i, &cpuset)) { // 检查cpuset中对应CPU的位是否被设置 printf("CPU %zu ",

    31910

    CC++ 学习笔记八(断言与异常处理)

    assert将通过检查表达式的值来决定是否需要终止程序,如果表达式为真(1)则忽略断言,程序继续运行。...= NULL)检查函数返回值是否为NULL。...如果一个系统调用或库函数调用失败,可以通过errno的值来确定问题所在。...ERANGE 以字符串转成长整型函数strtol为例, 在64位机器下,long长度为8字节,最大值LONG_MAX 为 0x7fffffffffffffff,当变量longStr 取超出长整型最大值的字符串...小结 C语言中,使用函数的返回值来标志函数是否执行成功(默认成功返回1,失败返回0)当使用接口时,必须对函数进行正确性的验证,检查它的返回值,并且对每个错误的返回值进行相应的处理以及提示。

    2.5K00

    TT无人机扩展模块库分析(default.ino)补篇1

    在很多编程语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码(防止重复包含某些文件)。要完成这些工作,就需要使用预处理程序。...使用宏来根据不同的平台包含不同的文件. 很多时候, 我们的代码是需要跨系统平台编译和运行的. 比如: 一个小功能代码, 需要既可以在Win下面运行, 还要可以在Max, linux上面运行....应该是屏幕会全亮一次 接着是设置函数(横排,竖排,LED的状态(开闭)) ? 设置阵列中所有LED的LED亮度。三行代码~ ? 参数是一个指针,所以需要强制转换参数,来读一个数组。在下面 ? ?...默认值为8个数据位,无奇偶校验,一个停止位。 将设置代码放在此处,即可运行一次 ? 初始化灯 同时设置三个灯的亮度 ? ? ? 这个太简单了,不说了 ? 附上一个呼吸灯的程序 ?...另外ISR函数里所使用的变量应声明为volatile类型。详情请见以下”关于ISR(中断服务程序)”部分。 使用中断 中断很适合执行那些需要不断检查的工作,比如检查一个引脚上连接的按键开关是否被按下。

    1.2K20

    Linux kernel中常见的宏整理

    避免使用goto,对程序流进行统一的控制,使用break跳出 避免空宏引起的warning 定义一个单独的函数块来实现复杂的操作 0x01 常见宏整理 __CONCAT宏 "##"用于粘贴两个参数,"#...(e); })) 检查表达式e是否为0为0编译通过且返回0;如果不为0,则编译不通过. struct { int : –!!...typecheck宏 宏typecheck用于检查x是否为type类型,如果不是会抛出(warning: comparison of distinct pointer types lacks a cast...内核开发者通过将系统调用的所有输入参数都先转化成long类型(64位),再强制转化到相应的类型来规避这个漏洞。...linux 内核的一些错误码,以它们的负数来作为函数返回值,简单地使用大于等于-4095的虚拟地址来分别表示相应的错误码。

    2K50

    【C语言】程序环境和预编译

    #define所定义的标识符和宏的替换规则 a. 在调用宏时,首先对宏参数进行检查,看看是否包含由#define定义的标识符。如果有,标识符首先会被替换掉。...b.宏是无法调试的 宏在预编译阶段就已经完成替换了,并且#define定义的所有东西都会在预编译阶段被删除的干干净净,而当我们开始调试时,宏的内容已经被替换的面目全非了。...#undef(有点儿鸡肋) 我们可以使用#define来定义宏,也可以使用#undef来取消我们的宏定义 #define M 100 int main() { printf("%d\n", M); #...例如下面代码,如果MAX被定义我们可以让编译器输出一个语句,如果没有定义我们也可以让它输出语句,这完全取决于我们的需求,我们可以控制是否编译的条件。...我们利用1和0或1按位与还是它本身的特点,分别拿出这个整数的偶数部分的二进制位并且向右移动一个比特位,再拿出这个整数的奇数部分的二进制位向左移动一个比特位,最后重新加起来就可以了,这样就交换了整数的奇数位和偶数位

    72120

    【C语言】预处理

    当我们在使用#define的时候,变量有两项,一是name,二是stuff,而stuff中的值将会代替代码中所有的name,相当于是办公软件word里边的替换,所以我们遇到以下的问题,就可以一下解决出来...> int main() { int a = MAX; return 0; } 都是可以的,但是我们要注意,当我们想要直接用printf输出MAX的值时,用第一个是不可以的 这是使用第二个定义...1、调用宏的时候,首先对参数进行检查,看是否包含任何由#define定义的符号,如果是,他们首先被替换,也就是首先替换参数 2、然后替换文本随后被插入到程序中原本文本的位置,对于宏,参数名被它们的值所替换...函数参数只在传参的时候求值一次,结果容易被控制 参数类型 宏的参数与类型无关,只要对参数的操作合法,就可以使用任何数据类型 函数的参数与类型有关,必须严格按照参数类型来进行使用,不同参数类型不同,所需要的函数就不同...,#ifdef用来检查后边的指令是否被定义,如果被定义了,那么就进行编译,如果未被定义则编译,调试结束之后将#define语句注释掉就行了 常见的条件编译指令 //1.

    11710

    Linux内存描述之内存页面page--Linux内存管理(四)

    当然这时候我们这些标识都是通过宏的方式来实现的, 而不是如今的枚举类型 MAX_NR_NODES是可以存在的节点的最大数...., 如果该比特未被置位, 说明有使用者正在操作该page, 则内核的其他部分不允许访问该页, 这可以防止内存管理出现竞态条件 PG_error 如果涉及该page的I/O操作发生了错误, 则该位被设置...PG_uncached PG_hwpoison PG_young PG_idle 内核中提供了一些标准宏,用来检查、操作某些特定的比特位,这些宏定义在include/linux/page-flags.h..., 这些标识大多通过enum枚举常量来定义, 然后__NR_XXXX的形式结束, 正好可以标记出宏参数的个数, 但是在早期的实现中, 这些变量都通过宏来标识 例如我们的page->flags用enum...v=2.4.37, line 324 形式如下 PageXXX(page):检查page是否设置了PG_XXX位 SetPageXXX(page):设置page的PG_XXX位 ClearPageXXX

    8.6K11

    【C语言】宏定义详解

    #undef 取消(取消定义)一个先前定义的宏。 #ifdef 检查某个宏是否已定义。 #ifndef 检查某个宏是否未定义。 #if 根据宏或表达式的值决定是否包含代码。...#ifdef #ifdef 指令用于检查某个宏是否已定义。如果宏已定义,则编译相关的代码块。...#ifndef #ifndef 指令用于检查某个宏是否未定义。如果宏未定义,则编译相关的代码块。...#if #if 指令用于根据宏或表达式的值决定是否编译某些代码。它允许使用常量表达式进行条件判断。...理解这些宏定义的用法可以帮助开发人员编写更加高效和可维护的代码。 16. 结束语 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言宏定义有了更深入的理解和认识。

    14410

    宏相关问题

    定义宏的主要有两个场景: 通过宏定义常量:在常量变更时仅需要修改宏的定义而不需要修改所有使用到常量的位置 带参数的宏可以减少系统调用函数的开销:对于一些特别简单的函数而言,函数的调用开销不可忽视,带参数的宏在预处理阶段就进行了宏展开...C++是否应该避免使用宏,如何避免使用宏?...我们可以通过改进 MAX 宏,来解决这个问题: #define MAX(a, b) ({ \ __typeof(a) __a = (a), __b = (b); \ __a > __b...__a : __b; \ }) 简单说明下,上述的 __typeof 可以根据变量的类型来定义一个相同类型的变量。改进后的 MAX 宏,输出的是正确的结果,max 输出 6,a 输出 7。...虽然改进的后 MAX 宏,解决了问题,但是这种宏的长相就让人困惑。

    75910

    NumPy 1.26 中文文档(四十六)

    如果设置了NPY_USE_GETITEM标志,并且知道getitem方法使用arr参数而不检查它是否为NULL,则需要base。否则base可以是NULL。...如果dtype是void标量,或者设置了NPY_USE_GETITEM标志并且已知getitem方法使用arr参数而不检查它是否为NULL,则需要base。否则,base可能为NULL。...NPY_VERSION ndarray 对象的当前版本(检查是否定义了这个变量,以确保正在使用numpy/arrayobject.h头文件)。...NPY_VERSION ndarray 对象的当前版本(检查是否定义了此变量,以确保使用了numpy/arrayobject.h头文件)。...由于它在 C-API 中,可以通过比较此函数的输出和当前头文件中定义的值来测试 C-API 是否已更改,从而需要重新编译使用 C-API 的扩展模块。这在函数import_array中自动检查。

    9210

    STM32CubeMX | 40-实时时钟RTC的使用(日历和闹钟)

    配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 这里我都使用外部时钟: ?...,切换到 Clock Configuration 页面,配置为使用外部晶振(若无法选择,检查LSE时钟是否配置为外部晶振): ?...设定闹钟值,MASK用来决定闹钟匹配时是否屏蔽该字段: ? 「当RTC当前值和闹钟设定值相同时,会将RTC初始值和状态寄存器(RTC_ISR)中的 ALRAF 标志位硬件置位」: ?...按照HAL库的中断处理思想,编写回调函数,这里需要注意,因为RTC外设所有的中断都是通过EXTI触发的,所以中断触发后,HAL会根据不同的标志位去调用不同的回调函数。...「HAL库提供了两种机制供我们使用」,通过宏定义USE_HAL_RTC_REGISTER_CALLBACKS的值来判断。

    4.4K31
    领券