KEIL 里面变量为啥能跳转但是编译说没有定义该变量

关注

技术 qiuqiu    2018-08-10   |   浏览量 910  
求大佬们解释一下,为什么KEIL 里面变量能跳转但是编译说没有定义该变量

最佳答案

  • 向悫 发表于2018-08-10 云汉达人

    因为,你使用了条件预编译。

    即该段代码,虽然写了,因为预编译的指令条件不成立,则该段的代码,编译器不编译,相当于没有这段代码,所以才会说没有定义改变量.


    l例如: 如果我在程序中,没有定义VECT_TAB_SRAM  这个宏、

    #ifdef VECT_TAB_SRAM
      SCB->VTOR = SRAM_base | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
    #else
      SCB->VTOR = FLASH_base | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
    #endif

    此时,编译器只编译:SCB->VTOR = FLASH_base | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */

    上面的SCB->VTOR = SRAM_base | VECT_TAB_OFFSET; 则不进行编译。你在这个段里面定义的变量、代码通通不编译。

    回答点赞:   Angel_YY coliner stru9g1e 15345338508 代人凌峰 王栋春 Linux小学童 请输入用户名 举报 评论 8

其他答案

  • a4c022bac1fe9697 发表于 2018-08-10

    一个文件下的变量在其他文件中使用了 ,需要申明!

    回答点赞:   coliner 15345338508 代人凌峰 王栋春 WQS1314 举报 评论 5

  • xdsnet 发表于 2018-08-10

    多半是涉及条件编译预处理相关问题,所以可能你没有设置相关编译条件,则代码中有也不一定编译到了。

    回答点赞:   15345338508 代人凌峰 王栋春 WQS1314 举报 评论 4

  • yhj416606438 发表于 2018-08-10

    变量需要用extern申明一下

    回答点赞:   请输入用户名 15345338508 代人凌峰 王栋春 举报 评论 4

  • Linux小学童 发表于 2018-08-11

    印象里这个问题刚有人问过。这个应该是变量作用域的问题,在一个文件里定义了一个变量,在其他文件里用了,但没有extern声明一下。

    回答点赞:   请输入用户名 15345338508 代人凌峰 王栋春 举报 评论 4

  • 最帅的廖先生 发表于 2018-08-11

    我觉得应该是条件编译引起的,要设置相关的编译条件。

    回答点赞:   coliner 15345338508 代人凌峰 王栋春 举报 评论 4

  • 勇哥来巡山 发表于 2018-08-11

    这个是你的全局变量没有声明导致的,在你的全局变量的头文件加上extern

    回答点赞:   15345338508 代人凌峰 王栋春 举报 评论 3

  • 捷波 发表于 2018-08-11

    应该是条件编译引起的,有些条件是放在工程项目的属性中设置的,所以在文件中找不到相应的条目。

    回答点赞:   15345338508 代人凌峰 王栋春 举报 评论 3

  • 最帅的廖先生 发表于 2018-08-11

    我觉得应该是条件编译引起的,要设置相关的编译条件。

    回答点赞:   15345338508 代人凌峰 王栋春 举报 评论 3

  • @曲终人散@ 发表于 2018-08-11

    检查头文件加了没

    回答点赞:   15345338508 王栋春 代人凌峰 举报 评论 3

  • US 发表于 2018-08-12

    看变量是否在宏定义范畴内,在则需要在编译参数加-D相应的宏名称

    回答点赞:   王栋春 代人凌峰 举报 评论 2

  • a4c022bac1fe9697 发表于 2018-08-10

    多个文件中变量互用,需要在对应的.h文件中进行申明!

    回答点赞:   王栋春 举报 评论 1

  • 明有几时有 发表于 2018-08-12

    没有定义时,是没有办法进行编译下载的,你又是从哪里看到的跳动呢

    回答点赞:   王栋春 举报 评论 1

  • chen0000009 发表于 2018-08-12

    看一下那个头文件有没被包含,或者该函数是否被声明

    回答点赞:   王栋春 举报 评论 1

  • shakencity 发表于 2018-08-13

    条件预编译 说的很好啊

    回答点赞:   王栋春 举报 评论 1

  • dreamadmirer 发表于 2018-08-15

    是不是变量在其他c文件中调用,但是你没有对变量进行申明。或者使用条件预编译,因为不满足条件,所以不编译。

    回答点赞:   王栋春 举报 评论 1

  • 喵不是好兔纸 发表于 2018-08-15

    说明你的变量没有声明,所以要在你的变量定义的头文件里面进行变量的声明

    回答点赞:   王栋春 举报 评论 1

  • 请输入用户名 发表于 2018-08-16

    变量应用需要声明,你虽然定义了,但在其他文件里使用,没有声明。

    回答点赞:   王栋春 举报 评论 1

  • bigCQ 发表于 2018-08-17

    因为你的变量没有声明,所以要先声明变量再使用

    回答点赞:   王栋春 举报 评论 1

  • WQS1314 发表于 2018-08-19

    你所使用的变量没有申明,要先声明再使用

    回答点赞:   王栋春 举报 评论 1

  • 菜鸟冷虎 发表于 2018-08-27

    要重新对你变量进行声明,不然没有在全局使用

    举报 评论 0

我来回答

试用推荐

正点原子阿波罗STM32F767开发板

产品总数:3个  申请人数:133

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: Linux 系统 灵动微MCU 电源技术

完成答题
赶快去开启您的宝箱吧
问答积分兑换板卡