9.1 文件包含
FreeBASIC文件包含有三個(gè)指令:#Include,句包含另一個(gè)源文件的內(nèi)容;#IncLib,包含一個(gè)庫(kù)文件;#libpath,將庫(kù)搜索路徑添加到鏈接器的搜索路徑列表中。
#Include在其指令出現(xiàn)的位置插入另一個(gè)文件的源代碼。這具有從所包含的文件編譯源代碼的效果,就好像它是包含它的源文件的一部分。一旦編譯器到達(dá)了include文件的末尾,原始源文件就會(huì)繼續(xù)編譯。這使得文件可以根據(jù)功能分成多個(gè)文件,在由多個(gè)模塊組成的程序中具有聲明的單個(gè)文件是有用的。您可以在include文件中包含文件,這樣可以避免將原始文件包含在其中,只有在編譯后才會(huì)產(chǎn)生結(jié)果。通常,include文件的擴(kuò)展名為.bi,主要用于聲明庫(kù)的過(guò)程或函數(shù)或變量,但任何有效的源代碼都可能存在于包含的文件中。
Once說(shuō)明符告訴編譯器只包含該文件一次,即使它被源代碼包含多次。元命令$Include是#Include的替代形式,主要是為了兼容QuickBASIC存在的。正常使用建議用#include。
根據(jù)需要,編譯器將自動(dòng)轉(zhuǎn)換路徑分隔符('/'和'\'),以正確加載文件。文件名稱可以是絕對(duì)路徑或相對(duì)路徑。對(duì)于相對(duì)路徑,或根本沒(méi)有路徑,include文件按以下順序進(jìn)行搜索:1、相對(duì)于源文件的目錄;2、相對(duì)于當(dāng)前工作目錄;3、相對(duì)于使用-i命令行選項(xiàng)指定的添加目;4、FreeBASIC安裝的包含文件夾(FreeBASIC\inc),其中FreeBASIC是fbc可執(zhí)行文件所在的文件夾)
語(yǔ)法:
例如:FireFly默認(rèn)引用的文件
#IncLib在鏈接過(guò)程中包含一個(gè)庫(kù),就像用戶在命令行中指定了-l libname一樣。FreeBASIC的庫(kù)文件以.a為后綴,例如:包含一個(gè)libmystuff.a的庫(kù)文件可以用語(yǔ)句#inclib "mystuff" 來(lái)實(shí)現(xiàn)。
#libpath將庫(kù)搜索路徑添加到鏈接器的搜索路徑列表中,就像在命令行中使用'-p'選項(xiàng)指定的一樣。路徑與調(diào)用fbc的工作目錄相對(duì),而不是相對(duì)于源文件的目錄。如果路徑不存在并且編譯和鏈接將繼續(xù),則不會(huì)生成錯(cuò)誤。例如搜索lib目錄下的外部庫(kù)則使用#libpath “l(fā)ib”。
9.2 宏定義
FreeBASIC的宏定義有兩種:#Define和#Macro。#Define允許聲明基于文本的預(yù)處理器宏。一旦編譯器看到#Define定義的標(biāo)識(shí)符,則用它body 替換該標(biāo)識(shí)符。body 可以為空。替換是遞歸完成的,直到?jīng)]有更多的標(biāo)識(shí)符可以替換,編譯器可以繼續(xù)分析生成的代碼。#UnDef用于取消定義先前使用#Define定義的標(biāo)識(shí)符。
Parameters 將define轉(zhuǎn)換為類似函數(shù)的宏,允許將文本參數(shù)傳遞給宏。body 中的任何參數(shù)名稱的出現(xiàn)將在擴(kuò)展期間由給定的參數(shù)文本替換。
注意:在類似函數(shù)的宏聲明中,標(biāo)識(shí)符(Identifier)之后必須是括號(hào)“(”,之間不能有任何空格,否則編譯器會(huì)將其視為body 的一部分。
如果在模塊級(jí)別定義,定義在整個(gè)模塊中是可見(jiàn)的。如果在具有范圍(Sub,F(xiàn)or..Next,While..Wend,Do..Loop,Scope..End Scope等)的復(fù)合語(yǔ)句中定義了標(biāo)識(shí)符 ,則標(biāo)識(shí)符 定義僅在該范圍內(nèi)可見(jiàn)。另一方面,命名空間對(duì)define的可見(jiàn)性沒(méi)有任何影響??梢允褂?pp編譯器選項(xiàng)檢查宏擴(kuò)展的結(jié)果。#Define通常用于聲明常量,Const語(yǔ)句則是一種更為安全的聲明方法。
語(yǔ)法:
例如:
#Macro其實(shí)就是#Define的多行形式,語(yǔ)法如下:
例如:
9.3 條件編譯
條件編譯語(yǔ)句即是有條件的在編譯時(shí)選擇一定的語(yǔ)句參與編譯,F(xiàn)reeBASIC的條件編譯語(yǔ)句有#if…#elseif…#else…#endif(這里可以是一個(gè)整體,也可以單獨(dú)分開,跟if..else語(yǔ)句的用法相同,只是一個(gè)用于編譯時(shí),一個(gè)用于運(yùn)行時(shí))defined (symbol_name ) 用來(lái)判斷給定符號(hào)名稱是否定義,如果符號(hào)已被定義,defined預(yù)處理函數(shù)將返回真(True)如果符號(hào)未知,則返回假(False)。此語(yǔ)句通常配合#if條件語(yǔ)句來(lái)判斷。
語(yǔ)法:
例如:
#IfDef和#IfnDef用來(lái)判斷標(biāo)識(shí)符(symbol)是否定義,必須用#EndIf來(lái)結(jié)束。通常我們用#IfnDef來(lái)判斷頭文件是否多次引用。
語(yǔ)法:#IfDef
例如:
語(yǔ)法:#ifnDef
例如:
聯(lián)系客服