• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

就一个地方定义了,为啥显示重复定义

huihui163 2017-07-10 浏览量:477
ssss.rar
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 您好,已更改完畢,還是講一下問題,看您是要使用同一個變數名稱和內容,則絕對不能使用static!


    1. 您放在Header的是已經明確的定義(Definition),非單純宣告(Declaration)

    2. 所以main.c和lcd.c,都引用同一變數時,將會產生重複定義錯誤

    3. 將明確定義(Definition)搬至lcd.c,刪除static識別字

    4. header保留Declaration,並增加extern識別字

    5. main.c則可直接參考(Reference),引用同一個變數

    另外可觀察,data占用的空間

    修改前

    Program Size: Code=7568 RO-data=336 RW-data=3308 ZI-data=1028  
    修改後

    Program Size: Code=7568 RO-data=336 RW-data=1680 ZI-data=1024  
    可看到RW-data已經共用,不只節省空間,也不會非共用同一個變數內容,但要注意重新assingment時,引用該變數的函數都會受影響


    修改完畢下載

    ssss.zip

    以上

    • 发布于 2017-07-13
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:5

  • 这个问题那天不是解决了吗?

    那个数组前面都加个static

    • 发布于2017-07-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 用extern就好了,再標頭檔(假設main.h)定義extern uchar jiong[15];

    然後明確定義再某個引用的c檔案

    #include "main.h"

    uchar jiong[15]={....};

    以上是假設您要共用這筆數組到各個C檔案的scope

    若不是,只需要在每個數組前面增加static,則各自c檔的scope不會重複宣告

    以上

huihui163 回复了 MOP :您看图片显示就一处定义啊,为啥编译提示重复定义啊,这个数组就在主函数调用,就是12864取模的数组 回复
MOP 回复了 huihui163 :不是,一處明確定義的,假設其他C檔案也是使用這個變數名稱又沒有extern/static修飾的話,會多重定義,就會出現您那個錯誤 回复
MOP 回复了 huihui163 :共用的話,其他c檔案不需要再宣告,可以直接使用(因為已經再標頭檔定義),不共用的話,每個c檔案要各自定義相同變數名稱並在前面增加修飾字static 回复
huihui163 回复了 MOP :#ifndef __LCD_H #define __LCD_H #include "sys.h" #include "stdlib.h"这个用过了,不应改报警把 回复
MOP 回复了 huihui163 :不一樣,是額外加的,主要是您需要共用同一個變數的話,增加一個標頭檔,用extern定義,其中一個引用的C檔案明確定義,則其他引用的C檔案就不需要在宣告,您上面列的這些應該是專案本來就有的還有標準庫,您需額外增加 回复
MOP 回复了 huihui163 :不一樣,是額外加的,主要是您需要共用同一個變數的話,增加一個標頭檔,用extern定義,其中一個引用的C檔案明確定義,則其他引用的C檔案就不需要在宣告,您上面列的這些應該是專案本來就有的還有標準庫,您需額外增加 回复
huihui163 回复了 MOP :用extern编译还是和原来一样 回复
MOP 回复了 huihui163 :您好,可以把Project上傳,這樣比較快一點,一定有c檔案重複宣告 回复
huihui163 回复了 MOP :上传了,你们可以看一下 回复
huihui163 回复了 MOP :大神,谢谢您的回答,您看变成extern就不行? 回复
MOP 回复了 huihui163 :已附上更改好的版本 回复

  • 头文件没写好,没有用ifndef 吧
    • 发布于2017-07-11
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 xukejing :#ifndef __LCD_H #define __LCD_H #include "sys.h" #include "stdlib.h" 回复

  • 是不是我圈出的这个警告

    QQ截图20170712220006.png


    那是因为你定义的ADCBuff数组,没有使用导致的。

    QQ截图20170712220053.png


    下面屏蔽这个变量,请看效果

    QQ截图20170712220708.png


    • 发布于2017-07-12
    • 举报
    • 评论 2
    • 0
    • 0
huihui163 回复了 冰山一角 :谢谢您 回复
冰山一角 回复了 冰山一角 :客气了,对你有帮助就好。 回复

相关问题

问题达人换一批

就一个地方定义了,为啥显示重复定义