|
發布時間: 2019-6-7 06:32
正文摘要:/*************************第一個問題***********************************************/ 第一個問題:如下圖所示,我這里是有五個源文件,然后有四個頭文件,因為函數只能在頭文件聲明而不能定義, ... |
| 你可以單獨做一個h文件,里面#define uchar unsigned char。然后再每個用到的c文件中引入這個h文件。使用typedef不行,我猜是因為關鍵字不能包含空格。typedef unsigned char uchar,在unsigned char之間存在空格,所以不行。但是使用typedef char* PCHAR這樣的可以。 |
|
#define是C語言中定義的語法,是預處理指令,在預處理時進行簡單而機械的字符串替換,不作正確性檢查,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。 typedef是關鍵字,在編譯時處理,有類型檢查功能。它在自己的作用域內給一個已經存在的類型一個別名,但不能在一個函數定義里面使用typedef。 根據typedef與define的定義,說明你的頭文件沒有包含標準庫 |
董董 發表于 2019-6-8 05:44 1)第一個問題,你只要在調用的文件里include被調用函數聲明的頭文件即可 2)是因為你重復定義了一個符號,你可以把所有的類型定義集中到一個頭文件,然后每個要使用的頭文件中都包含這個就可以了,這樣源文件就不用再次包含了 |
wfy1008 發表于 2019-6-8 19:57 嗯嗯,我也覺得這是個很好的解決辦法,多謝指點 |
a452541823 發表于 2019-6-8 19:21 一般單片機程序都是#include <reg52.h>不會寫#include <stdio.h>呀,但是包含reg52.h條件下也能typedef unsigned char uchar |
suncat0504 發表于 2019-6-8 15:24 但是如果我在只有一個main()函數中用typedef unsigned char uchar是可以的,后面的用uchar沒有報錯,但是我一分開文件在別的源文件寫就報錯,不太明白。不過你說的單獨寫一個頭文件里面#define uchar unsigned char倒是一個很好的解決辦法,多謝指點了! |
| 頭文件相互包含 |
| typedef的頭文件你加了嗎? |
univers 發表于 2019-6-7 22:28 我知道不同功能分文件寫是為了方便移植,我想問的是main()函數在最后鏈接的時候會調用在別的源文件中定義的函數對吧?以及第二個問題為啥typedef在頭文件里不能用呢? |
| 與編譯器有關吧。 |
| 這個就是多文件,模塊化編程的原理了,每個個功能分開編寫,清晰明了。放便以后移植。 |
| 各位進來看下指點下呀,多謝了 |