頭文件不參加編譯,為什么還要包含到源文件中
頭文件不參加編譯,為什么還要包含到源文件中
頭文件通常需要參加編譯,要包含到源文件中。當(dāng)然,你可以 把 頭文件獨立出來,改名為 .c (或 .cpp), 不包含到 源文件中,與源文件分開編譯,編成 .obj 后 再鏈接也可以。
假如 某程序,確實不需要 某個頭文件,那么 就沒有必要 包含進去。
例如,程序里 沒有用到 三角函數(shù),開方 之類 的 數(shù)學(xué) 庫 函數(shù),你就 不需要 寫 #include <math.h>。例如,程序里 沒有用到 time() 之類的 時間庫 函數(shù),你就 不需要 寫 #include <time.h>。
為什么C語言頭文件中要用條件編譯?
因為 你用的和你看到的頭文件是為開發(fā)者方便服務(wù)的,不是為你服務(wù)的。 有了條件編譯,開發(fā)人員可以很方便的為多種情形(比如不同硬件環(huán)境,不同軟件環(huán)境)維護一套代碼。
發(fā)布時原樣發(fā)布出來就是你看到的樣子。
你的使用條件和使用環(huán)境確定的話,可以去掉條件編譯的,只是需要花時間精力,沒人去干而已??梢韵螺d嘗試下中文版的C語言:習(xí)語言, 頭文件里很少條件編譯。
為什么在頭文件里面用條件編譯呢?程序如下
#define指示接受一個名字并定義該名字為預(yù)處理器變量。#ifndef指示檢測指定的預(yù)處理變量是否未定義。
如果預(yù)處理器變量未定義,那么跟在其后的所有指示都被處理,直到出現(xiàn)#endif。
可以用這些設(shè)施來預(yù)防多次包含同一頭文件。你的例子是測試LCDHEARD宏是否被定義,如果未定義就定義那個宏,同時#include <forlcd.h>// 液晶驅(qū)動程序#include <changdata.h>//宏定義文件為什么要避免頭文件被重復(fù)包含?因為#include是直接將頭文件的內(nèi)容取代#include所在行,所以如果頭文件重復(fù)包含的話,代碼量將相當(dāng)龐大,編譯效率下降。
C語言為什么要包含頭文件
頭文件中含有一些聲明和已編譯好了的函數(shù),可以提高程序時間復(fù)雜度和空間復(fù)雜度,簡化程序。如stdio.h頭文件中包含scanf,printf,sprintf等函數(shù),只有包含了stdio.h頭文件才能正常使用,否則無法使用,只能自己編寫其他函數(shù)代替。百科
關(guān)于頭文件編譯
頭文件不能編譯,只能編譯源文件。源文件預(yù)編譯的時候,如果碰到#include <xxx.h>,就把xxx.h中的文本內(nèi)容全部**到相應(yīng)的位置比如在cpp中寫int a[] = {#include \”a.h\”};在\”a.h\”中寫1, 2, 3, 4, 5是合法的。
預(yù)編譯后就是int a[] = {1, 2, 3, 4, 5};你還可以試驗其他更古怪的#include方法。
再結(jié)合#define去理解預(yù)編譯的意義。
c語言中,把函數(shù)放在不同程序文件中,在頭文件包含進行編譯,連接和運行,為什么會產(chǎn)生問題?
如果沒有添加#include \”txtReader.cpp\”你再輸入編譯命令時要同時編譯兩個文件,不能只編譯一個,比如gcc main.cpp txtReader.cpp你只編譯一個文件當(dāng)然就會出這個錯一般要建一個project