前言
你们有没有在写代码的时候,遇到有的参数,从函数体里面传进来,但是又用不上,所以就不引用,但是不引用,在编译的时候,就会提示错误。是不是很尴尬,我们不使用,并不是错误,为什么会提示编译错误?
我想了下,这个是可以理解的,我们做一个系统,肯定是希望可靠性强一点,如果不提示错误,那就出现一个警告,如果我们编译出现很多很多个警告,我们都不在意,假设有一个警告导致了致命的问题,我们的系统就崩溃了。
所以,严格编译规范是势在必行的。
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
微信扫描二维码,关注我的公众号