|
macro的中文名稱:宏& l! g+ B0 ~1 u1 Q- `
什么是宏 |8 q$ C, I$ S% \! f6 ?" \
計算機科學里的宏是一種抽象,它根據(jù)一系列預定義的規(guī)則替換一定的文本模式,。Excel 辦公軟件自動集成了“VBA”高級程序語言,,用此語言編制出的程序就叫“宏”。使用“VBA”需要有一定的編程基礎和耗費大量的時間,,因此,,絕大多數(shù)的使用者僅使用了Excel的一般制表功能,很少使用到“VBA”。
, i. \$ Z: G, u, l& s4 m* C0 L* B: f4 `: ^; F8 H/ O" I7 l
解釋器或編譯器在遇到宏時會自動進行這一模式替換,。對于編譯語言,,宏展開在編譯時發(fā)生,進行宏展開的工具常被稱為宏展開器,。宏這一術(shù)語也常常被用于許多類似的環(huán)境中,,它們是源自宏展開的概念,這包括鍵盤宏和宏語言,。絕大多數(shù)情況下,,使用“宏”這個詞的使用暗示著將小命令或動作轉(zhuǎn)化為一系列指令。 2 c# t* r0 d( e9 e }% S
, T4 H% o0 X- F3 K7 ]/ f5 S
宏的用途在于自動化頻繁使用的序列或者是獲得一種更強大的抽象能力--但這常常是一回事,。 / P7 X' k5 q _3 o3 ~: E+ q
3 ?( J' O6 V/ s5 Z4 o' N8 y/ J 計算機語言如C或匯編語言有簡單的宏系統(tǒng),,由編譯器或匯編器的預處理器實現(xiàn)。C的宏預處理器的工作只是簡單的文本搜索和替換,,使用附加的文本處理語言如M4,,C程序員可以獲得更精巧的宏。 $ Q# j; p% s' Z
- r- y8 @ t0 e$ g' c: Y Lisp類語言如Common Lisp和Scheme有更精巧的宏系統(tǒng): 宏的行為如同是函數(shù)對自身程序文本的變形,,并且可以應用全部語言來表達這種變形,。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節(jié)代碼的計算,。
9 _. \, w# p$ p# \. Z3 |6 m) m; Y# d% [: t" ~7 z) Y* z7 h2 ~
獲得了控制代碼的執(zhí)行順序(見惰性計算和非限制函數(shù))的能力,,使得新創(chuàng)建的語法結(jié)構(gòu)與語言內(nèi)建的語法結(jié)構(gòu)不可區(qū)分。例如,,一種Lisp 方言有 cond 而沒有if ,,就可以使用宏由前者定義后者。Lisp 語法的去部主要擴展,,比如面向?qū)ο蟮腃LOS 系統(tǒng),,可以由宏來定義。3 N. M- @/ B6 h& `+ z3 t
宏的典型應用
4 j! j: H- o7 j8 S( H- G; c 加速日常編輯和格式設置 6 Z6 e( W4 M- |$ D' |8 V0 D4 ^
5 x" y" ^. a7 w; h* A5 t, r+ f 組合多個命令 " U, c% |% g- ]1 O2 Y
. R1 z6 T. c$ R/ M- G
使對話框中的選項更易于訪問
/ b. m7 p( }' u
! L" ]0 U" t) B3 \: J1 q. X 使一系列復雜的任務自動執(zhí)行, B; L; g6 T+ D. m- o. l
宏編程介紹
& S% |+ l0 g; k! z' p 在用一種不熟悉的宏語言進行宏編程時,,可以這樣做,,首先記錄下用戶想要宏完成什么,然后打開宏文件并嘗試理解命令結(jié)構(gòu)如何工作,。也可以修改命令以調(diào)整宏,。一些宏語言,比如Great Plains賬務(,?accounting)軟件的 Dexterity 運行時引擎,,不能從其它數(shù)據(jù)源(如由逗號分隔的文本文件)導入數(shù)據(jù)。這一限制可以通過用更強大的編程語言,,如 VBA 來創(chuàng)建一個計算機程序在此弱編程語言里生成一個特別的宏來解決,。例如,,可以對 Microsoft Excel 宏編程從擴展樣式表或文本文件中讀取數(shù)據(jù)并創(chuàng)建 Great Plains .mac 文件,這一文件被用于將特定的數(shù)據(jù)導入 Great Plains. 需要針對每一個新的數(shù)據(jù)集合聲稱新的 .mac 文件,。: c# E* I5 B7 V% h T8 }' F
鍵盤宏, e* |* I* l) U
鍵盤宏和編輯器宏分別在圖形用戶界面和編輯器中被交互式地使用,。使用它們可以用簡短的擊鍵代替冗長的命令序列,并為重復性任務提供了一個簡單的自動化形式,。
! e. E m% z6 S) K [7 P5 S+ `0 c) X' b
程序員的文本編輯器 Emacs (“編輯宏”[Editing MACroS]的簡稱)是沿用這一思想的產(chǎn)物,。事實上,大多數(shù)編輯器是由宏組成的,Emacs 最初被設計為編輯語言 TECO 的宏集,,后被移植為 Lisp 的一中方言 Emacs Lisp,。0 @, h: w8 M" p0 S U! N
宏語言
7 W4 t' }4 N/ H3 m5 ? 宏語言是一類編程語言,其全部或多數(shù)計算是由擴展宏完成的,。宏語言并未在通用編程中廣泛使用,,但在文本處理程序中應用普遍。例如,, p; ?( M! Z% X) K! A) O- p
8 A" @9 g9 X d( H- C4 W C preprocessor C 預處理器 ! L. Q) n8 m8 @2 o* G- v, {
" m/ n6 p* E i7 y- A" s( | Internet Macros(iOpus) 7 S5 a% a6 i, S7 r6 ^" p( o
; j8 e0 s0 H M7 ~- P6 M4 @7 q
M4(如前所述,,源于AT&T,捆綁于Unix)
. t! h J0 m) W' C( H
3 P& ?# L0 f# m, X( c0 H, f 宏定義
! x3 r' w0 p6 }, T% y+ D0 F* x. |8 j: p+ E4 F. h9 q( ]
c程序提供的預處理功能之一,。包括帶參數(shù)的宏定義和不帶參數(shù)的宏定義,。具體是指用一個指定的標志符來進行簡單的字符串替換或者進行闡述替換。形式為: - I9 u- ~1 ^& i* a& [
3 n! m1 J6 @' J6 @' k
#define標志符(參數(shù)表) 字符串
1 C' g9 t( K$ l2 \1 \* U" O" V& C6 e& `# s b- H) a( w
宏名 2 M n; c# |. d% S& F
1 u: l0 t, P7 A6 x8 W 在上定義中的標志符被稱為“宏名”,。 9 i0 z. `7 u& ~( t
1 {1 |, ]1 F- t( y# ~ H
宏展開 6 m' M9 e4 b0 `
, C( c- ?1 f) R" w1 N3 j2 J 在c程序編譯時將宏名替換成字符串的過程稱為“宏展開”,。- `4 R( g+ C3 ^
微軟Word和宏病毒
) H8 g3 ] _- j- Z" k Visual Basic for Applications (VBA),是 Microsoft Office 里的一種編程語言. 但由上面的定義,,它完全不是一種宏語言。然而,,它的功能已經(jīng)從中發(fā)展并最終替代了用戶應用程序的宏思想,,所以他被廣泛地錯誤地稱為是一種宏語言。
8 {; q% q9 R' @4 ~
( T$ {( v2 v$ p' q VBA 可以訪問許多操作系統(tǒng)函數(shù)并支持文檔打開時自動執(zhí)行宏,。這使得用這種語言寫計算機病毒成為可能,。1990年代中后期,宏病毒成為了最流行的計算機病毒類型之一,。其它的包括宏語言的項目,,如openoffice org,故意從其宏語言中排除了一些功能(如:自動執(zhí)行)以避免破壞程序,。然而,,這一特性在很多事務中受到歡迎。
6 o/ M8 u+ A( X) b4 D; Y3 m+ D# N/ w
5 K6 }4 P; K I \0 j3 w, @! L 另:在數(shù)碼相機鏡頭中Marco的意思是微距,。
7 Z$ {. m) Y9 G' _2 g0 f# b' m; n1 Q5 \2 B5 v; Q' Y1 t; v+ h8 I& m
詞典所得,,原來都能跟宏有關! |
評分
-
查看全部評分
|