MDK编译提示main.c(7): warning: #550-D: variable "XX" was set but never used怎么破

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MDK编译提示main.c(7): warning: #550-D: variable "XX" was set but never used怎么破相关的知识,希望对你有一定的参考价值。

程序如下:
#include "spi.h"

int main(void)

u8 key=0;
extern delay_init(); //延时函数初始化
SPI2_Init( );
SPI2_SetSpeed(2);

key = SPI2_ReadWriteByte(0x00);


一编译就说KEY声明了没有使用…… 求救

定义了变量key,使用key的代码为:key = SPI2_ReadWriteByte(0x00);执行函数并将函数返回值赋值给key,没有使用这个返回。

比如

int b=a;

从a中读取数据负值给b.

其实,我是感觉声明和负值的地方离那么远很奇怪。

反正循环里面又不用,为什么不到负值的时候才声明。

扩展资料:

使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在VB Script中只有一个基本数据类型,即Variant,因此所有变量的数据类型都是Variant。 

例如,可以创建一个名为Click Count的变量来存储用户单击Web页面上某个对象的次数。

参考资料来源:百度百科-变量

参考技术A

用volatile关键字修饰变量d,删除掉以释放可能的内存,定义了变量key。

使用key的代码为:key = SPI2_ReadWriteByte(0x00),编译器会分析出函数的返回值没有被使用,因此给key赋值会被编译器省略掉,于是只剩下定义变量key,并没有使用key(使用key的那句赋值步骤被编译器优化掉了)。

比如

int b=a;

从a中读取数据赋值给b。

扩展资料:

1.编译:

 MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c++和汇编源文件
编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要
是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;

2.链接:

链接器 armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”;

3. 格式转换:

一般来说 Windows 或 Linux 系统使用链接器直接生成可执行映像文件 elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的 elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的 FLASH 或 ROM 中。

参考技术B 分析如下:
定义了变量key
使用key的代码为:key = SPI2_ReadWriteByte(0x00);
执行函数并将函数返回值赋值给key,然后没有使用这个返回值
编译器对于这种情况会做优化,编译器会分析出函数的返回值没有被使用,因此给key赋值会被编译器省略掉,于是只剩下定义变量key,并没有使用key(使用key的那句赋值步骤被编译器优化掉了)本回答被提问者和网友采纳
参考技术C 虽然key确实没被使用,但是有时候我们就想它这样,结果编译器一直提示警告很烦,那么这是就可以加一个 key=key; ,这样编译器就不会出现这条警告了! 参考技术D 就这些代码,看不出问题。

以上是关于MDK编译提示main.c(7): warning: #550-D: variable "XX" was set but never used怎么破的主要内容,如果未能解决你的问题,请参考以下文章

编译器玄学报告第四期——成也warning,败也warning

main.c: error: #13: expected a file name #include CMSIS_device_header main.c: 0 warnings, 1 error

mdk硬件仿真STM32 怎么查看当前系统时钟

Keil/MDK:使用过程中的一些设置

MDK编译器内存分配

keil debug提示not in scope