找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 988|回复: 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生成的初始代码,百思不得其解。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
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
回复

使用道具 举报

5#
ID:791737 发表于 2022-4-17 21:01 | 只看该作者

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

使用道具 举报

6#
ID:791737 发表于 2022-4-18 10:28 | 只看该作者
我用的平台是cubeide 准备换keil,试一下。
回复

使用道具 举报

7#
ID:791737 发表于 2022-4-18 15:23 | 只看该作者
找到问题了,参考cubeide下定义的方法,extern在头文件定义后,在c文件里去掉extern再定义一遍
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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