多模塊程序是由不止一個(gè)目標(biāo)文件組成的程序。這里出現(xiàn)的所有程序都是多模塊程序。它們由C驅(qū)動(dòng)目標(biāo)文件和匯編目標(biāo)文件(加上C庫(kù)目標(biāo)文件)組成?;貞浺幌逻B接程序?qū)⒛繕?biāo)文件組合成一個(gè)可執(zhí)行程序。連接程序必須把在一個(gè)模塊(也就是目標(biāo)文件)中引用的每個(gè)變量匹配到定義該變量的模塊。為了讓模塊A能使用定義在模塊B里的變量,就必須使用extern(外部)指示符。在extern 指示符后面是用逗號(hào)隔開(kāi)的變量列表。這個(gè)指示符告訴編譯器把這些變量視為是模塊外部的。也就是說(shuō),這些變量可以在這個(gè)模塊中使用,但是卻定義在另一模塊中。asm_io.inc文件中就將read_int等程序定義為外部的。
在編譯語(yǔ)言中,缺省情況下變量不可以由外部程序訪問(wèn)。如果一個(gè)變量可以被一個(gè)模塊訪問(wèn),而這個(gè)模塊又不是定義它的,那么在定義它的模塊中,它一定被聲明為global(全局的)。global 指示符就可以用來(lái)做這件事情。圖1.7的程序skeleton中的第13行定義了一個(gè)全局變量asm main。若沒(méi)有這個(gè)聲明,就可能會(huì)出錯(cuò)。為什么?因?yàn)镃代碼將會(huì)找不到內(nèi)部的_asm_main變量。
下面是用兩個(gè)模塊重寫(xiě)的以前例子的代碼。子程序(get_int和print_sum)在不同的源文件中,而不是在_asm_main程序中。
上面的例子只有全局的代碼變量;同樣,全局?jǐn)?shù)據(jù)變量也可以使用一模一樣的方法。
更多建議: