找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3526|回復(fù): 9
收起左側(cè)

keil4 C語(yǔ)言變量重復(fù)定義的問(wèn)題

[復(fù)制鏈接]
ID:531175 發(fā)表于 2019-5-19 23:07 | 顯示全部樓層 |閱讀模式
最近在練習(xí)模塊化編程,現(xiàn)在我有兩個(gè).c文件,都要用到 uint16,我在每個(gè).h文件里都寫(xiě)了  typedef  unsigned int uint16;
可是軟件報(bào)錯(cuò),
Build target 'Target 1'
compiling LCD設(shè)計(jì)的秒表.c...
compiling miaob.c...
DELAY.H(4): error C231: 'uint16': redefinition
compiling delay.c...
DELAY.C(4): error C231: 'uint16': redefinition
Target not created
我該怎么改呢

回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2019-5-20 07:52 | 顯示全部樓層
把錯(cuò)誤信息譯成你能懂的語(yǔ)言,按照提示去改。
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2019-5-20 08:34 | 顯示全部樓層
錯(cuò)誤231,就是重復(fù)定義。
你的頭文件,應(yīng)該加上條件編譯就沒(méi)問(wèn)題了。
就是:
#ifndef
......
#endif
這樣,就不會(huì)有重復(fù)編譯的錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

ID:527827 發(fā)表于 2019-5-20 08:44 | 顯示全部樓層
就寫(xiě)一次

或者提升一級(jí),做成一個(gè)公用的.h文件,在里面定義
回復(fù)

使用道具 舉報(bào)

ID:285194 發(fā)表于 2019-5-20 08:45 | 顯示全部樓層
只需要定義一個(gè),然后另外一個(gè).c文件包含定義的那個(gè).h文件,就可以使用里面宏定義的東西了
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2019-5-20 09:11 來(lái)自手機(jī) | 顯示全部樓層
放在一個(gè)公共的.h
回復(fù)

使用道具 舉報(bào)

ID:531175 發(fā)表于 2019-5-20 12:33 | 顯示全部樓層
774559006 發(fā)表于 2019-5-20 08:45
只需要定義一個(gè),然后另外一個(gè).c文件包含定義的那個(gè).h文件,就可以使用里面宏定義的東西了

好嘞,謝謝
回復(fù)

使用道具 舉報(bào)

ID:531175 發(fā)表于 2019-5-20 12:34 | 顯示全部樓層
ssk7793 發(fā)表于 2019-5-20 09:11
放在一個(gè)公共的.h

好嘞,謝謝你
回復(fù)

使用道具 舉報(bào)

ID:511890 發(fā)表于 2019-5-20 14:19 | 顯示全部樓層
如果你在.c中include了.h,那么頭文件和.C可以理解為是連通的,所有的在一個(gè)文件里,都起作用的。如果你在DELAY.C里include了DELAY.h,同時(shí)兩個(gè)文件里都有typedef  unsigned int uint16: 那么肯定會(huì)提示重定義。去掉其中一個(gè)就行。如果沒(méi)有include,就沒(méi)問(wèn)題。
回復(fù)

使用道具 舉報(bào)

ID:530977 發(fā)表于 2019-5-22 09:36 來(lái)自手機(jī) | 顯示全部樓層
#define   unsigned int uint
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表