首页 > 其他分享 >STM32F407 宏定义实现函数错误返回

STM32F407 宏定义实现函数错误返回

时间:2023-04-26 15:24:10浏览次数:39  
标签:__ ... 定义 VA ARGS ET STM32F407 define 函数

开发环境:Window10 + MDK + STM32F407

实现目的:针对在函数内部需要对各个执行的子函数判断错误返回的场合,用宏定义替换繁琐的编码

代码实现:

 1 /* 这种写法怎样 注册宏定义,故障返回批量处理  注册函数不能写在线程内部 */
 2 #define ET_(...) if (!__VA_ARGS__)                  \
 3         {                                           \
 4             Log("%s Error Return\r\n", __func__);   \
 5             return false;                           \
 6         }                                           \
 7 
 8 /* 注册自带错误返回的函数接口 如果返回值false,所在的函数也会退出并返回false */
 9 #define etValveCtrl(...)            ET_(aMachine_SetValveState(__VA_ARGS__))
10 #define etInjector_Pop(...)         ET_(Injector_Pop(__VA_ARGS__))
11 #define etInjector_Push(...)        ET_(Injector_Psh(__VA_ARGS__))
12 #define etINjector_Store(...)       ET_(INjector_Store(__VA_ARGS__))

1、封装返回的固定模式,支持不定长参数。

2、封装具体函数实例。

 

标签:__,...,定义,VA,ARGS,ET,STM32F407,define,函数
From: https://www.cnblogs.com/yangjinghui/p/17356178.html

相关文章

  • 函数高级、包的使用、if-else、循环、switch、数组
    目录1函数高级2包的使用3if-else4循环5switch6数组1函数高级packagemainimport"fmt"//1函数的参数和返回值都是类型的一部分,函数可以赋值给一个变量//test3函数,接收一个参,参数是函数类型:没有参数没有返回值//test有返回值,返回值是个函数:函数有两个参数,一......
  • SpringSecurity从入门到精通:其他权限校验方法&自定义权限校验方法
    其他权限校验方法我们前面都是使用@PreAuthorize注解,然后在在其中使用的是hasAuthority方法进行校验。SpringSecurity还为我们提供了其它方法例如:hasAnyAuthority,hasRole,hasAnyRole等。​这里我们先不急着去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学......
  • 在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框
    在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框1、先写一个自定义的AlertDialog。 packagecom.phone.common_library.dialog; importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.vie......
  • 视频编辑重新定义!PremierePro2022 Mac版新增多种功能
    随着AI的不断发展,人工智能的工作方式已经从“人脑”进化到“机器”,而它的最终目标,就是将人类最复杂的工作交给AI。AI也在不断地深入理解人类,提高人类智能。在视频编辑方面,PremierePro2022mac新增了许多功能与以前最大不同之处:它对图片编辑方式进行了重新定义,可以让用户能够......
  • 我的C++常用函数
    /*根据多个分隔符来分隔字符串.比如":,]"*/std::vector<std::string>SplitString(conststd::string&str,conststd::string&delimiters){std::vector<std::string>tokens;size_tprev=0,pos;while((pos=str.find_first_of(d......
  • Oracle数据库设计——定义约束 主键
    Oracle数据库设计——定义约束主键[code]声明约束主键(PRIMARYKEY)一张表不一定有主键,但大多数表都创建了主键,主键值必须唯一并且组成主键的各列都不能为空。想象一下存储学生信息的一张表。在学生表(STUDENTS)每个学生有且仅有一行记录。因此,在S......
  • SpringSecurity从入门到精通:从数据库查询权限信息&自定义失败处理
    从数据库查询权限信息      记得打开redis      自定义失败处理我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity......
  • 12 | C语言中的函数类型和函数指针类型
    函数类型和函数指针类型的区别,让我们先看一个例子#include<iostream>usingnamespacestd;typedefint(Func)(int);typedefint(*Func_p)(int);intf(inta){returna;}intmain(){Func_pp=f;Func*p_ptr=f;cout<<p(0)<<endl;cout<<p_ptr(1)......
  • 从数据库查询权限信息与自定义失败处理
    从数据库查询权限信息代码实现我们只需要根据用户id去查询到其所对应的权限信息即可。​  所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。packagecom.example.qinghuatokendemo.Mapper;importc......
  • 自定义实现SpringBoot Starter
    在日常的开发中,会将开发的公共jar包发布的仓库,这样可以实现代码的复用。这里介绍的是自定义SpringBootStarter的方式,对于采用SpringBoot开发的项目来说,引入和使用非常的方便。1、SpringBootStarter介绍SpringBoot和Spring相比,在配置上简化了很多,核心就是因为Starter引入了一些......