UNUSED参数,这个宏,很秀

前言

你们有没有在写代码的时候,遇到有的参数,从函数体里面传进来,但是又用不上,所以就不引用,但是不引用,在编译的时候,就会提示错误。是不是很尴尬,我们不使用,并不是错误,为什么会提示编译错误?

我想了下,这个是可以理解的,我们做一个系统,肯定是希望可靠性强一点,如果不提示错误,那就出现一个警告,如果我们编译出现很多很多个警告,我们都不在意,假设有一个警告导致了致命的问题,我们的系统就崩溃了。

所以,严格编译规范是势在必行的。

UNUSED 宏

#define UNUSED(x) (void)(x)

我们这样使用这个宏

void f(int x) {UNUSED(x);...
}

使用 void 把 x 做格式转换,这行代码不管在什么编译器上,都可以得心应手,当然了,我们也可以把void改成int,但是这样执行的时候,可能占用的机器周期就不同了。最好的还是 转换成void格式。

UNUSED 宏2

#define UNUSED(x) (x = x)

相比上一个写法,我觉得这个更容易理解,不过本身没啥意义。

使用 gcc/clang 的UNUSED属性

代码如下

#ifdef __GNUC__
#  define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
#  define UNUSED(x) UNUSED_ ## x
#endif#ifdef __GNUC__
#  define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
#  define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif

编译的时候加上参数

源码:

#include "stdio.h"int main(int argc, char * const argv[])
{int i = 0;printf("hello,world\n");return 0;
}

我们正常编译命令
加上 -Wall是指把所有的警告都提示出来
加上 -Werror 是指把警告转成错误提示出来,这样会停止编译

gcc -Wall -Werror test.c && ./a.out

加上宏编译

gcc -Wno-unused-parameter test.c && ./a.out

参考:https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生
专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Python对文件进行批量重命名——以图片文件为例

效果如下:0001号用户的第 i 张图片 代码: import osclass ImageRename():def __init__(self):self.path C:/Users/lbpeng/Desktop/test/chictopia2/images1/fashioninmysoul/fulldef rename(self):filelist os.listdir(self.path)totalnum len(fileli…

mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...

因为业务需求,要统计每天的新增用户并且要用折线图的方式展示。如果其中有一天没有新增用户的话,这一天就是空缺的,在绘制折线图的时候是不允许的,所有要求把没有数据的日期也要在图表显示。查询2019-01-10------2019-01-20日的新…

我一个专科生,还有未来吗?

今天分享一个星球里面的讨论你好,我加入这个星球也算比较久了在此之前也一直都是在观望,我是一个19年因为高考失利而没有选择复读的专科生,我选择的专业是嵌入式技术与应用,最近不知道为什么特别迷茫,在选择读专科之前…

2017年9月27日日志

今日工作: 上午休息: 1.今日服务安排; 2.四楼小白兔施工内容沟通; 3.单机及打印机排障; 4.文化环境方案制作。 今日分享: 上午休息了半天,一会儿一个电话,本想睡个懒觉,结果虽然休息…

mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

Sqlserver 获取每组中的第一条记录在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面、功能下面,从数据库的术语来说,就是查找出每组中的一条…

Linux select/poll机制原理分析

转载一篇文章,讲解select和poll机制的,分享给大家。前言Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基1. 概述Linux系统在访问设备的时候,存在以下几种IO模型:Blocking IO Model&am…

SSM框架的搭建学习(1)---MyBatis的环境搭建

SSM(SpringSpringMVCMyBatis)框架为当今最为流行的WEB开发框架之一,基本上涉及数据库的一些增删改查操作都可以借用此框架,本尊此前接的一个小公司关于楼宇空调监控指标的项目就是基于此框架,只不过当时框架已经被别人搭建好,只等我去添砖加瓦,并没有从头开始对此框架进行着手搭…

argv python 提示输入_Python解释器

一、Python解释器我们编写的Python代码都要放在Python解释器上运行,解释器是代码与计算机硬件之间的软件逻辑层。当我们在操作系统上安装好Python之后,它就包含了保证Python运行的最小化组件:解释器 和 标准库。根据选用的Python版本的不同&a…

高阶篇:8.1)开模前评审及提交资料;

本章目的:明确开模前需要提交的资料,确保开模一次性成功。 在现有机械行业制作技术的大环境下,除却必要的机加工零件之外,大部分的零件量产都需要开模制作。如塑胶、钣金、压铸、粉末冶金、锻造等。 但是模具是很贵的(…

Android系统充电系统介绍-预防手机充电爆炸

1、锂电池介绍锂离子电池由日本索尼公司于1990年最先开发成功。它是把锂离子嵌入碳(石油焦炭和石墨)中形成负极(传统锂电池用锂或锂合金作负极)。正极材料常用LixCoO2 ,也用 LixNiO2 ,和LixMnO4 ,电解液用L…

c 结构体中的变长数组

在Linux系统里,/usr/include/linux/if_pppox.h里面有这样一个结构: struct pppoe_tag { __u16 tag_type; __u16 tag_len; char tag_data[0]; } __attribute ((packed)); 最后一个成员为可变长的数组,对于TLV(Type-Length-Value&am…

Linux物理内存初始化

背景Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基说明:Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio1. 介绍让我们思考…

mysql中%3c%3e和=_Grafana+Prometheus 监控 MySQL

架构图环境IP环境需装软件192.168.0.237mysql-5.7.20node_exporter-0.15.2.linux-amd64.tar.gzmysqld_exporter-0.10.0.linux-amd64.tar.gz192.168.0.248grafanaprometheusprometheus-2.1.0.linux-amd64.tar.gznode_exporter-0.15.2.linux-amd64.tar.gzgrafana-4.6.3.linux-x64…

Linux CentOS7.0 (01)在Vmvare Workstation上 安装配置

一、新建虚拟机 1、创建新的虚拟机 -》 默认典型 -》选择安装介质 2、指定虚拟机名称、安装目录、磁盘容量大小 点击 “完成”,创建虚拟机! 随后虚拟机将自动启动安装过程。 二、安装linux 1、选择 English、English(United States&#xff0…

i=1,为什么 (++i)+(++i)=6?

源码#include "stdio.h"int main(void) {int i 1;printf("%d\n",(i) (i));return 0; }执行weiqifabsp-ubuntu1804:~/c/undif$ gcc g.c && ./a.out 6 weiqifabsp-ubuntu1804:~/c/undif$为什么出现这个鬼现象?原因很简单,C语…

celery mysql 异步_celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]

前言:51cto的文章已经不再补充更新了,另外celery rabbitmq详细的使用方法请到这里浏览.http://xiaorui.cc/2014/11/16/celery-rabbitmq%E5%AE%9E%E7%8E%B0%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97%E7%9A%84%E5%BC%82%E6%AD%A5%E6%89%A7%E8%A1%8C/为啥要用c…

Android-HIDL实例解析

HIDL 简介“HAL interface definition language or HIDL (pronounced “hide-l”) is an interface description language (IDL) to specify the interface between a HAL and its users. It allows specifying types and method calls, collected into interfaces and package…

phpstudy mysql创建表_MySQL_Mysql入门基础 数据库创建篇,1.创建数据表---基础(高手跳 - phpStudy...

Mysql入门基础 数据库创建篇1.创建数据表---基础(高手跳过)正统方法:create [TEMPORARY] table 表名 [if not exists](创建的列项定义)[表的选项][分区的选项];#正统的创建方式,具体的参数,请参考mysql手册,在这里不做详细的解释&…

区域赛第33天

1、最近感觉自己的时间可以利用好的,但是就是自己的学习效率比较低,主要问题就是一旦放松下来就会放松很长的时间,所以说浪费了很多的时间。。。 2、现在最重要的就是从心底相信自己真的能拿金牌,所以就是现在主要的任务就是恢复信…

用bat-抓取android日志

echo off cls set filename%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% set postfixdebug.log set debugfilename%filename%-%postfix% adb shell logcat -G 4M adb shell logcat > %debugfilename%pause