![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c
c 学习开发相关记录
vvvlan
嵌入式 iot 网络 c相关开发
展开
-
C语言宏定义-max、min宏再看Linux内核问题演进
C语言宏定义-max、min宏再看Linux内核严谨性文章目录C语言宏定义-max、min宏再看Linux内核严谨性1. 简介2. `__COUNTER__`宏3. 相关宏1. 简介1) 通常我们经常使用如下宏判断返回X、Y的最小值或者最大值#define min(X, Y) ((X) < (Y) ? (X) : (Y))#define max(X, Y) ((X) < (Y) ? (Y) : (X))宏参数可能被重复调用的问题:例如 next=min(++a,1),宏被展开原创 2020-11-15 22:08:28 · 1625 阅读 · 0 评论 -
C语言宏定义-再看ARRAY_SIZE
文章目录C语言宏定义-再看ARRAY_SIZE1. 简介2. 相关宏C语言宏定义-再看ARRAY_SIZE1. 简介做过linux驱动开发的人员,应该都用过ARRAY_SIZE(x)宏,目的求出一个数组包含的个数,在2007内核提交了一个patch,更新了这个宏加入__must_be_array(arr)是防止被误用,比如用指针而不是数组上。#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr))原创 2020-11-14 22:58:18 · 6200 阅读 · 1 评论 -
C语言宏定义-静态断言宏static_assert
文章目录C语言宏定义-静态断言宏static_assert1. 简介2. 相关宏C语言宏定义-静态断言宏static_assert1. 简介assert适用于运行时的断言,也就是说,如果程序不运行,我们根本不知道有没有错,但是有些时候,我们希望在编译的时候就可以让编译器检测到错误,所以在c++11中新增了assert_static,也就是静态断言。对于我们c开发,使用宏定义也能自己封装一套静态编译断言。2. 相关宏CMO_STATIC_ASSERT(cond)编译时检查cond表达式是否原创 2020-11-14 21:19:05 · 3602 阅读 · 0 评论 -
C语言宏定义-跟踪调试宏
文章目录C语言宏定义-跟踪调试宏1. 简介2. 相关宏3. 例子C语言宏定义-跟踪调试宏1. 简介标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。__LINE__当前代码行的行号,表示为十进制整型常量, 注:#line可以重新设定__LINE__的值__FILE__当前代码的文件名(全路径),表示字符串型常量__func__ or __FUNCTION__当前代码所在的函数原创 2020-11-14 18:23:02 · 1004 阅读 · 0 评论 -
C语言宏定义-#和##在宏定义中的作用
C语言宏定义-’#,##'在宏定义中的作用1. 宏##的作用是把宏的标识符进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号/** * @def CMO_STRINGIFY * @brief converts a macro argument into a character constant. * * @param[in] x - A macro argument to stringify. */#define CMO_ST原创 2020-11-14 12:03:23 · 1075 阅读 · 0 评论 -
C语言宏定义-主流编译器相关的宏
C语言宏定义-主流编译器相关的宏1. 目的嵌入式c语言日常开发中,主要面对的编译器有3种,KEIL、IAR、GCC,为了实现多编译代码的统一,抽象了编译器相关的宏,初始设计来源于cmsis源码抽象。2. 编译器类型识别/** * @brief Compiler type. * - CMO_COMPILER_TYPE */#if defined(__CC_ARM)#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 40原创 2020-11-13 23:34:36 · 1778 阅读 · 0 评论 -
C语言宏定义-基本使用
C语言中宏定义基本使用1. 宏定义的基本语法宏定义分为2类, 不带参数的宏定义 和 带参数的宏定义1.1 不带参数的宏定义形式:使用一个指定的标识符来代表一个字符串#define 标识符 字符串例如#define PI 3.14159265作用:程序中但凡使用到PI的地方全部都会用3.14159265来替换,主要用途使用一个简单标识符来代替一个长的字符串1.2 带参数的宏定义形式:带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换#define 标识符(参数表) 字符串原创 2020-11-13 18:26:16 · 850 阅读 · 0 评论