深山老妖 发表于 2024-9-7 18:18:55

Keil C251报 ERROR L103: EXTERNAL ATTRIBUT DO NOT MATCH PUBLIC

本帖最后由 深山老妖 于 2024-9-7 18:23 编辑

其中的两个变量,如果不初始化=0,就不会报氏是,一但初始化超过1个就会报错,初始化其中的任意一个都不会报错,只要超过2个就会报错,用的芯片是32G12K64
编译报错信息



定义的变量,不会报错时


会报错时



别的文件下的外部变量,只有一处外部引用此变量



DebugLab 发表于 2024-9-7 20:13:19

这个错误通常发生在你在一个文件中声明了一个全局变量或函数,然后在另一个文件中试图使用它,但是两个地方的声明不匹配

深山老妖 发表于 2024-9-7 22:39:05

DebugLab 发表于 2024-9-7 20:13
这个错误通常发生在你在一个文件中声明了一个全局变量或函数,然后在另一个文件中试图使用它,但是两个地方 ...

只要不初始化它超过两个,就不会报错,只要超过两个,就会报错,有点奇怪,如果只初始化,三个其中的任何一个,都没问题,只要初始化任意中的两个,就会报错。

深山老妖 发表于 2024-9-8 01:00:40

已经写了一个最简单的测试程序,只有四个变量,依然会报错,真的有点搞不明白了。



DebugLab 发表于 2024-9-8 01:10:19

本帖最后由 DebugLab 于 2024-9-8 01:11 编辑

深山老妖 发表于 2024-9-8 01:00
已经写了一个最简单的测试程序,只有四个变量,依然会报错,真的有点搞不明白了。



在函数外不能给extern修饰的全局变量声明时赋值(初始化),要用extern,全局变量声明时不能赋值,在main函数内赋值(初始化)

深山老妖 发表于 2024-9-8 01:32:14

本帖最后由 深山老妖 于 2024-9-8 01:36 编辑

DebugLab 发表于 2024-9-8 01:10
在函数外不能给extern修饰的全局变量声明时赋值(初始化),要用extern,全局变量声明时不能赋值,在main ...
但是如果把这四个变量分开写,就可以,不会报错,或者去掉xdata,也不会报错,这个是属于使用方式的错误吗?






DebugLab 发表于 2024-9-8 10:07:43

深山老妖 发表于 2024-9-8 01:32
但是如果把这四个变量分开写,就可以,不会报错,或者去掉xdata,也不会报错,这个是属于使用方式的错误吗 ...

哦,那就这样用好了
页: [1]
查看完整版本: Keil C251报 ERROR L103: EXTERNAL ATTRIBUT DO NOT MATCH PUBLIC