熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-6-7 06:32
正文摘要:/*************************第一個(gè)問(wèn)題***********************************************/ 第一個(gè)問(wèn)題:如下圖所示,我這里是有五個(gè)源文件,然后有四個(gè)頭文件,因?yàn)楹瘮?shù)只能在頭文件聲明而不能定義, ... |
你可以單獨(dú)做一個(gè)h文件,里面#define uchar unsigned char。然后再每個(gè)用到的c文件中引入這個(gè)h文件。使用typedef不行,我猜是因?yàn)殛P(guān)鍵字不能包含空格。typedef unsigned char uchar,在unsigned char之間存在空格,所以不行。但是使用typedef char* PCHAR這樣的可以。 |
#define是C語(yǔ)言中定義的語(yǔ)法,是預(yù)處理指令,在預(yù)處理時(shí)進(jìn)行簡(jiǎn)單而機(jī)械的字符串替換,不作正確性檢查,只有在編譯已被展開(kāi)的源程序時(shí)才會(huì)發(fā)現(xiàn)可能的錯(cuò)誤并報(bào)錯(cuò)。 typedef是關(guān)鍵字,在編譯時(shí)處理,有類(lèi)型檢查功能。它在自己的作用域內(nèi)給一個(gè)已經(jīng)存在的類(lèi)型一個(gè)別名,但不能在一個(gè)函數(shù)定義里面使用typedef。 根據(jù)typedef與define的定義,說(shuō)明你的頭文件沒(méi)有包含標(biāo)準(zhǔn)庫(kù) |
董董 發(fā)表于 2019-6-8 05:44 1)第一個(gè)問(wèn)題,你只要在調(diào)用的文件里include被調(diào)用函數(shù)聲明的頭文件即可 2)是因?yàn)槟阒貜?fù)定義了一個(gè)符號(hào),你可以把所有的類(lèi)型定義集中到一個(gè)頭文件,然后每個(gè)要使用的頭文件中都包含這個(gè)就可以了,這樣源文件就不用再次包含了 |
wfy1008 發(fā)表于 2019-6-8 19:57 嗯嗯,我也覺(jué)得這是個(gè)很好的解決辦法,多謝指點(diǎn) |
a452541823 發(fā)表于 2019-6-8 19:21 一般單片機(jī)程序都是#include <reg52.h>不會(huì)寫(xiě)#include <stdio.h>呀,但是包含reg52.h條件下也能typedef unsigned char uchar |
suncat0504 發(fā)表于 2019-6-8 15:24 但是如果我在只有一個(gè)main()函數(shù)中用typedef unsigned char uchar是可以的,后面的用uchar沒(méi)有報(bào)錯(cuò),但是我一分開(kāi)文件在別的源文件寫(xiě)就報(bào)錯(cuò),不太明白。不過(guò)你說(shuō)的單獨(dú)寫(xiě)一個(gè)頭文件里面#define uchar unsigned char倒是一個(gè)很好的解決辦法,多謝指點(diǎn)了! |
頭文件相互包含 |
typedef的頭文件你加了嗎? |
univers 發(fā)表于 2019-6-7 22:28 我知道不同功能分文件寫(xiě)是為了方便移植,我想問(wèn)的是main()函數(shù)在最后鏈接的時(shí)候會(huì)調(diào)用在別的源文件中定義的函數(shù)對(duì)吧?以及第二個(gè)問(wèn)題為啥typedef在頭文件里不能用呢? |
與編譯器有關(guān)吧。 |
這個(gè)就是多文件,模塊化編程的原理了,每個(gè)個(gè)功能分開(kāi)編寫(xiě),清晰明了。放便以后移植。 |
各位進(jìn)來(lái)看下指點(diǎn)下呀,多謝了 |
Powered by 單片機(jī)教程網(wǎng)