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

UNUSED参数,这个宏,很秀_第1张图片

加上宏编译

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

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

推荐阅读:

专辑|Linux文章汇总

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

嵌入式Linux

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

你可能感兴趣的:(UNUSED参数,这个宏,很秀)