keil中一直提示错误:main.c(63): error C202: 'num': undefined identifier

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil中一直提示错误:main.c(63): error C202: 'num': undefined identifier相关的知识,希望对你有一定的参考价值。

程序如下,大佬帮忙看看哪出问题了

主程序中声明变量num一行要写在第一行,你现在是写在第二行,而前面第一行是调用子函数。keil 语法规定,在可执行语句下声明变量无效,所以,num属于未声明的变量,无法编译,就出错了。 参考技术A 语法上看不出错误,不知道num前面的括号是不是用了中文的全角符号?

keil debug提示not in scope

问题截图:
编译的时候还爆了个警告:…\\src\\user_main.c(155): warning: #550-D: variable “crc_buffer” was set but never used

我开始是在更改变量类型,从uint32_t改成了uint8_t,uint16_t,uint64_t发现都不行,我想是不是给优化掉了,然后更改了优化等级如下图,从Level 3更改成了Level 0发现还是不行。


但我依然想着是被优化掉了,但是没想到方法。
我就解决了这个警告,使用了这个变量,哪怕这个变量使用方式是错误的,但是我可以看到数值了,如下图。

我后面请教了现在公司带我的师傅(赵老师),然后他给我提示我使用volatile,然后我发现可以看见数值了,然后他又让我换成了static,我发现也可以,然后又给我提示了下让我想想之前我参数变量放在哪个区域(栈),让我自己想了。

我的想法(如果错误望指正):
编译器优化,指挥优化栈中的变量,如果不优化栈中的变量,那么就像我很多的变量声明了但未使用,很容易导致栈溢出问题。加volatile关键字就是不让编译器优化栈中的这个变量,使用static的时候这个变量不存放在栈中,而是存放在静态变量区(堆),那么也不会被优化。

经过上面的想法,我就想如果这样的话,我把变量变成全局变量是不是也没有问题,事实就是没有问题。

我又更改了优化等级,从Level 0 更改成了不使用(default),并且变量还是放在栈(局部变量)中,发现还是not in scope

我后续看很多文章解决这个问题的,都是写更改优化等级,但都没写在点上,为啥要更改优化等级?还有其他方式防止优化吗?

经过此事我也对编译器优化有了一点点了解。

以上是关于keil中一直提示错误:main.c(63): error C202: 'num': undefined identifier的主要内容,如果未能解决你的问题,请参考以下文章

Keil4 一例异常解决办法

单片机编程。 keil中数组指针怎么用才规范呢?一直提示C182警告

keil工程Error: L6218E: Undefined symbol main (referred from rtentry2.o).

keil debug提示not in scope

keil debug提示not in scope

keil debug查看变量提示not in scope