什么是宏
所謂宏,就是一些命令組織在一起,作為一個(gè)單獨(dú)命令完成一個(gè)特定任務(wù)。Microsoft Word中對(duì)宏定義為:“宏就是能組織到一起作為一獨(dú)立的命令使用的一系列word命令,它能使日常工作變得更容易”。Word使用宏語(yǔ)言Visual Basic將宏作為一系列指令來(lái)編寫(xiě)。
計(jì)算機(jī)科學(xué)里的宏是一種抽象的,根據(jù)一系列預(yù)定義的規(guī)則替換一定的文本模式。Excel辦公軟件自動(dòng)集成了“VBA”高級(jí)程序語(yǔ)言,用此語(yǔ)言編制出的程序就叫“宏”。使用“VBA”需要有一定的編程基礎(chǔ),并且還會(huì)耗費(fèi)大量的時(shí)間,因此,絕大多數(shù)的使用者僅使用了Excel的一般制表功能,很少使用到“VBA”。
解釋器或編譯器在遇到宏時(shí)會(huì)自動(dòng)進(jìn)行這一模式替換。對(duì)于編譯語(yǔ)言,宏展開(kāi)在編譯時(shí)發(fā)生,進(jìn)行宏展的工具常被稱為宏展開(kāi)器。宏這一術(shù)語(yǔ)也常常被用于許多類似的環(huán)境中,它們是源自宏展開(kāi)的概念,這包括鍵盤宏和宏語(yǔ)言。絕大多數(shù)情況下,“宏”這個(gè)詞的使用暗示著將小命令或動(dòng)作轉(zhuǎn)化為一系列指令。
宏的用途在于自動(dòng)化頻繁使用的序列或者是獲得一種更強(qiáng)大的抽象能力--但這常常是一回事。
計(jì)算機(jī)語(yǔ)言如C或匯編語(yǔ)言有簡(jiǎn)單的宏系統(tǒng),由編譯器或匯編器的預(yù)處理器實(shí)現(xiàn)。C的宏預(yù)處理器的工作只是簡(jiǎn)單的文本搜索和替換,使用附加的文本處理語(yǔ)言如M4,C 程序員可以獲得更精巧的宏。
Lisp類語(yǔ)言如Common Lisp和Scheme有更精巧的宏系統(tǒng): 宏的行為如同是函數(shù)對(duì)自身程序文本的變形,并且可以應(yīng)用全部語(yǔ)言來(lái)表達(dá)這種變形。一個(gè)C宏可以定義一段語(yǔ)法的替換,然而一個(gè)Lisp的宏卻可以控制一節(jié)代碼的計(jì)算。獲得了控制代碼的執(zhí)行順序(見(jiàn)惰性計(jì)算和非限制函數(shù))的能力,使得新創(chuàng)建的語(yǔ)法結(jié)構(gòu)與語(yǔ)言內(nèi)建的語(yǔ)法結(jié)構(gòu)不可區(qū)分。例如,一種Lisp 方言有 cond 而沒(méi)有if ,就可以使用宏由前者定義后者。Lisp 語(yǔ)法的去部主要擴(kuò)展,比如面向?qū)ο蟮腃LOS 系統(tǒng),可以由宏來(lái)定義。
宏的典型應(yīng)用
加速日常編輯和格式設(shè)置 組合多個(gè)命令 使對(duì)話框中的選項(xiàng)更易于訪問(wèn) 使一系列復(fù)雜的任務(wù)自動(dòng)執(zhí)行
應(yīng)用程序也可以使用一種和宏類似機(jī)理的系統(tǒng)來(lái)允許用戶將一系列(一般是最常使用到的操作)自定義為一個(gè)步驟。也就是用戶執(zhí)行一系列操作,并且讓?xiě)?yīng)用程序來(lái)“記住”這些操作以及順序。更高級(jí)的用戶可以通過(guò)內(nèi)建的宏編程來(lái)直接使用那些應(yīng)用程序的功能。當(dāng)使用一種不熟悉的宏語(yǔ)言來(lái)編程時(shí),比較有效的方法就是記錄用戶希望得到的一連串操作,然后通過(guò)閱讀應(yīng)用程序記錄下來(lái)的宏文件來(lái)理解宏命令的結(jié)構(gòu)組成。
宏編程介紹
在用一種不熟悉的宏語(yǔ)言進(jìn)行宏編程時(shí),可以這樣做,首先記錄下用戶想要宏完成什么,然后打開(kāi)宏文件并嘗試?yán)斫饷罱Y(jié)構(gòu)如何工作。也可以修改命令以調(diào)整宏。一些宏語(yǔ)言,比如Great Plains賬務(wù)(accounting)軟件的 Dexterity 運(yùn)行時(shí)引擎,不能從其它數(shù)據(jù)源(如由逗號(hào)分隔的文本文件)導(dǎo)入數(shù)據(jù)。這一限制可以通過(guò)用更強(qiáng)大的編程語(yǔ)言,如 VBA 來(lái)創(chuàng)建一個(gè)計(jì)算機(jī)程序在此弱編程語(yǔ)言里生成一個(gè)特別的宏來(lái)解決。例如,可以對(duì) Microsoft Excel 宏編程從擴(kuò)展樣式表或文本文件中讀取數(shù)據(jù)并創(chuàng)建 Great Plains .mac 文件,這一文件被用于將特定的數(shù)據(jù)導(dǎo)入 Great Plains. 需要針對(duì)每一個(gè)新的數(shù)據(jù)集合生成新的 .mac 文件。
鍵盤宏
鍵盤宏和編輯器宏分別在圖形用戶界面和編輯器中被交互式地使用。使用它們可以用簡(jiǎn)短的擊鍵代替冗長(zhǎng)的命令序列,并為重復(fù)性任務(wù)提供了一個(gè)簡(jiǎn)單的自動(dòng)化形式。
程序員的文本編輯器 Emacs (“編輯宏”[Editing MACroS]的簡(jiǎn)稱)是沿用這一思想的產(chǎn)物。事實(shí)上,大多數(shù)編輯器是由宏組成的,Emacs 最初被設(shè)計(jì)為編輯語(yǔ)言 TECO 的宏集,后被移植為 Lisp 的一種方言 Emacs Lisp。
宏語(yǔ)言
宏語(yǔ)言是一類編程語(yǔ)言,其全部或多數(shù)計(jì)算是由擴(kuò)展宏完成的。宏語(yǔ)言并未在通用編程中廣泛使用,但在文本處理程序中應(yīng)用普遍。例如, C preprocessor C預(yù)處理器Internet Macros(iOpus) M4(如前所述,源于AT&T,捆綁于Unix)
宏定義
c程序提供的預(yù)處理功能之一。包括帶參數(shù)的宏定義和不帶參數(shù)的宏定義。具體是指用一個(gè)指定的標(biāo)志符來(lái)進(jìn)行簡(jiǎn)單的字符串替換或者進(jìn)行闡述替換。形式為:
#define標(biāo)志符[(參數(shù)表)] 字符串
宏名
在上定義中的標(biāo)志符被稱為“宏名”。
宏展開(kāi)
在c程序編譯時(shí)將宏名替換成字符串的過(guò)程稱為“宏展開(kāi)”。
宏語(yǔ)言是一類編程語(yǔ)言,其全部或多數(shù)計(jì)算是由擴(kuò)展宏完成的。宏語(yǔ)言并未在通用編程中廣泛使用, 但在文本處理程序中應(yīng)用普遍。例如,
C preprocessorC 預(yù)處理器
Internet Macros(iOpus)
M4(如前所述,源于AT&T,捆綁于Unix)
微軟Word和宏病毒
Visual Basic for Applications (VBA),是 Microsoft Office 里的一種編程語(yǔ)言. 但由上面的定義,它完全不是一種宏語(yǔ)言。然而,它的功能已經(jīng)從中發(fā)展并最終替代了用戶應(yīng)用程序的宏思想,所以它被廣泛地錯(cuò)誤地稱為是一種宏語(yǔ)言。
VBA 可以訪問(wèn)許多操作系統(tǒng)函數(shù)并支持文檔打開(kāi)時(shí)自動(dòng)執(zhí)行宏。這使得用這種語(yǔ)言寫(xiě)計(jì)算機(jī)病毒成為可能。1990年代中后期,宏病毒成為了最流行的計(jì)算機(jī)病毒類型之一。其它的包括宏語(yǔ)言的項(xiàng)目,如openoffice.org,故意從其宏語(yǔ)言中排除了一些功能(如:自動(dòng)執(zhí)行)以避免破壞程序。然而,這一特性在很多事務(wù)中受到歡迎。
內(nèi)容來(lái)自百科網(wǎng)