找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1354|回复: 6
收起左侧

一个非常奇怪的C语言变量定义,编译问题,折腾几天了

[复制链接]
ID:791737 发表于 2022-4-17 16:34 | 显示全部楼层 |阅读模式
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生成的初始代码,百思不得其解。



回复

使用道具 举报

ID:732794 发表于 2022-4-17 20:10 | 显示全部楼层
别在h文件里,在C里面声明试试呢
回复

使用道具 举报

ID:791737 发表于 2022-4-17 20:34 | 显示全部楼层
51FAN2020 发表于 2022-4-17 20:10
别在h文件里,在C里面声明试试呢

放在c里面不报错,
但是这个变量其他文件要引用的
头文件不包含,其他文件会报错。
回复

使用道具 举报

ID:732794 发表于 2022-4-17 20:42 | 显示全部楼层
kadiya 发表于 2022-4-17 20:34
放在c里面不报错,
但是这个变量其他文件要引用的
头文件不包含,其他文件会报错。

试试extern volatile
回复

使用道具 举报

ID:791737 发表于 2022-4-17 21:01 | 显示全部楼层

我一开始就是这种定义方式,不行。
cubemx自动生成的代码,也有在h文件里  extern 定义的方式,为什么他们的不报错,我的报错,这是我最困惑的。
回复

使用道具 举报

ID:791737 发表于 2022-4-18 10:28 | 显示全部楼层
我用的平台是cubeide 准备换keil,试一下。
回复

使用道具 举报

ID:791737 发表于 2022-4-18 15:23 | 显示全部楼层
找到问题了,参考cubeide下定义的方法,extern在头文件定义后,在c文件里去掉extern再定义一遍
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表