标题: 一个非常奇怪的C语言变量定义,编译问题,折腾几天了 [打印本页]

作者: kadiya    时间: 2022-4-17 16:34
标题: 一个非常奇怪的C语言变量定义,编译问题,折腾几天了
key.h 文件 C语言代码如下
#ifndef __KEY_H__
#define __KEY_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"

extern uint16_t key_id ;        //key编号

void Scan_key(uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

#ifdef __cplusplus
}
#endif

#endif


————————————————————————————————-
上边 全局变量这里报错
描述        资源        路径        位置        类型
undefined reference to `key_id'        key.c        /H7B0VB/user        第 22 行        C/C++ Problem


把全局变量定义命名去掉,换成
uint16_t key_id ;        //key编号

就没问题,但是我需要它全局呀,
我用的是cubemx生成的初始代码,百思不得其解。




作者: 51FAN2020    时间: 2022-4-17 20:10
别在h文件里,在C里面声明试试呢
作者: kadiya    时间: 2022-4-17 20:34
51FAN2020 发表于 2022-4-17 20:10
别在h文件里,在C里面声明试试呢

放在c里面不报错,
但是这个变量其他文件要引用的
头文件不包含,其他文件会报错。
作者: 51FAN2020    时间: 2022-4-17 20:42
kadiya 发表于 2022-4-17 20:34
放在c里面不报错,
但是这个变量其他文件要引用的
头文件不包含,其他文件会报错。

试试extern volatile
作者: kadiya    时间: 2022-4-17 21:01
51FAN2020 发表于 2022-4-17 20:42
试试extern volatile

我一开始就是这种定义方式,不行。
cubemx自动生成的代码,也有在h文件里  extern 定义的方式,为什么他们的不报错,我的报错,这是我最困惑的。
作者: kadiya    时间: 2022-4-18 10:28
我用的平台是cubeide 准备换keil,试一下。
作者: kadiya    时间: 2022-4-18 15:23
找到问题了,参考cubeide下定义的方法,extern在头文件定义后,在c文件里去掉extern再定义一遍




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1