野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12725|回复: 9

关于extern的用法

[复制链接]
发表于 2015-11-9 16:13:18 | 显示全部楼层 |阅读模式
我在stm32f10x_it.h中写入一句extern char *ch,在mian.h程序中写入#include “stm32f10x_it.h”之后,还需要在再定义一次char *ch这个吗(为什么不定义就报错啊)?是不是main.c就不用写入#include “stm32f10x_it.h”,只要写#include “main.h”?

回复

使用道具 举报

发表于 2015-11-9 17:46:31 | 显示全部楼层
对啊,按照你的说法直接在头文件写extern就可以在包含有该extern 头文件的c文件里使用了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-9 20:23:56 | 显示全部楼层
flyleaf 发表于 2015-11-9 17:46
对啊,按照你的说法直接在头文件写extern就可以在包含有该extern 头文件的c文件里使用了

那我包含了呀,为什么还显示在main.o里没有定义呢?
回复 支持 反对

使用道具 举报

发表于 2015-11-10 10:47:06 | 显示全部楼层
z3451065 发表于 2015-11-9 20:23
那我包含了呀,为什么还显示在main.o里没有定义呢?

你试试在源文件里使用extern定义,把头文件里的去掉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 16:25:19 | 显示全部楼层
flyleaf 发表于 2015-11-10 10:47
你试试在源文件里使用extern定义,把头文件里的去掉

然并卵。。。还是一样的报错。。。不知道为什么
回复 支持 反对

使用道具 举报

发表于 2015-11-10 16:42:15 | 显示全部楼层
z3451065 发表于 2015-11-10 16:25
然并卵。。。还是一样的报错。。。不知道为什么

报什么错误啊,发错误提示来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 17:00:47 | 显示全部楼层
flyleaf 发表于 2015-11-10 16:42
报什么错误啊,发错误提示来看看
  1. ..\..\User\main.c(83): error:  #20: identifier "ch" is undefined
复制代码



一直都是这样。。
回复 支持 反对

使用道具 举报

发表于 2015-11-10 17:06:55 | 显示全部楼层
z3451065 发表于 2015-11-10 17:00
一直都是这样。。

你是不是没有在任何一个文件定义:char *ch  ?
使用extern 是指这个变量在另一个文件定义了,所以你还是要在某个源文件定义char *ch的,例如main.c。
char *ch只能在某个文件出现一次,而extern char *ch可以在多个文件出现,而且在用到ch的文件必须有这个声明。
之前一直没领会你的意思。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 17:07:06 | 显示全部楼层
flyleaf 发表于 2015-11-10 16:42
报什么错误啊,发错误提示来看看
  1. #ifndef __STM32F10x_IT_H
  2. #define __STM32F10x_IT_H

  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif

  6. /* Includes ------------------------------------------------------------------*/
  7. #include "stm32f10x.h"
  8. /* Exported types ------------------------------------------------------------*/
  9. /* Exported constants --------------------------------------------------------*/
  10. /* Exported macro ------------------------------------------------------------*/
  11. /* Exported functions ------------------------------------------------------- */

  12. void NMI_Handler(void);
  13. void HardFault_Handler(void);
  14. void MemManage_Handler(void);
  15. void BusFault_Handler(void);
  16. void UsageFault_Handler(void);
  17. void SVC_Handler(void);
  18. void DebugMon_Handler(void);
  19. void PendSV_Handler(void);
  20. void SysTick_Handler(void);
  21. extern char *ch;
  22. #ifdef __cplusplus
  23. }
  24. #endif

  25. #endif /* __STM32F10x_IT_H */

  26. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
复制代码


我在stm32f10x_it.h中已经定义了,然后在main.h中也包含了stm32f10x_it.h。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 17:33:59 | 显示全部楼层
flyleaf 发表于 2015-11-10 17:06
你是不是没有在任何一个文件定义:char *ch  ?
使用extern 是指这个变量在另一个文件定义了,所以你还 ...

豁然开朗啊,原来是要先定义char *ch 然后才能用extern~~~谢谢大神!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 19:43 , Processed in 0.032589 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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