當前位置:首頁 » 編程軟體 » 編譯系統對程序中的宏展開是在

編譯系統對程序中的宏展開是在

發布時間: 2022-11-17 16:02:13

A. c語言編譯系統對宏命令的處理是

前言:宏實質就是編譯器在對代碼進行編譯之前進行的一個「查找替換」工作,就跟你在處理文檔時用wps/word/記事本等進行「查找替換」操作一樣。
c語言的編譯系統對宏命令的處理是()
a。在程序運行時進行的
b。在對源程序中其他成分正式編譯之前進行的
c。在程序連續時進行的
d。和c程序中的其他語句同時進行編譯
答:選b。在對源程序中其他成分正式編譯之前進行的
2,
#define
n
2
/*
在預編譯時將用下面代碼中n替換成2
*/
#define
m
n+1
/*
在預編譯時將m替換成n+1(即2+1,n會再被替換成2)*/
#define
num
2*m+1
/*
如上:在預編譯時num替換成2*m+1,即2*n+1+1,即2*2+1+1*/
main()
{int
i;
for(i=1;i<=num;i++)printf("%d\n",i);
/*
*
如上所述,上句展開為:for(i=1;i<=2*2+1+1;i++)printf("%d\n",i);
*
所以:循環將執行6次
*/
}
/*
切記注意:每一個宏百進行替換時只是替換「正文」中的內容,而不包括預編譯語句的內容,
否則就會像不少人理解的那樣,錯誤地認為第2個題中的循環將執行7次
*/

B. C語言的宏展開,講一下什麼是宏展開,怎麼實現

對於C++宏展開,先說一點:
#define功能將源程序文件中出現的對宏的引用展開成相應的宏
定義,由預處理器來完成。經過預處理器處理的源程序與之前的源程序有所有不同,在這個階段所進行的工作的確只是純粹的替換與展開,沒有任何計算功能。
對於「帶參數的宏替換」,可以由下列代碼嘗試理解下
#include
<stdio.h>
#define
min(x,y)
({
typeof(x)
_x
=
(x);typeof(y)
_y
=
(y);
(void)
(&_x
==
&_y);
_x
<
_y
?
_x
:
_y;
})
//防止x和y為一個表達式和失去了類型檢測功能;
#define
min_replace(x,y)
({
x
<
y
?
x
:
y;
})
void
main()
{
int
x=1;
int
y=2;
int
result
=
min(x++,y);
printf("沒有替換時的運行結果為:%d\n",result);
int
x1=1;
int
y1=2;
int
result1
=
min_replace(x1++,y1);
printf("替換之後的運行結果為:%d\n",result1);
return
;
}
需要注意:
宏名和參數表的括弧間不能有空格。
宏替換只做替換,不做計算和表達式求解,這一點要格外注意。
函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存。
宏的啞實結合(啞實結合類似於函數調用過程中實參替代形參的過程)不存在類型,也沒有類型轉換。
宏展開使源程序變長,而函數調用則不會。

C. 計算機編譯系統對宏定義在編譯時進行語法檢查這句話為什麼錯

  1. 第一步被換為area=a*b。
    宏定義末尾不加分號,減少輸入錯誤和便於修改。宏替換在編譯前進行,不做表達式求解函數調用在編譯後程序運行時進行,只佔編譯時間。

  2. 除了一般的字元串替換,函數調用不會。

  3. 宏展開不佔運行時間,不分配內存。

  4. 宏的啞實結合不存在類型,作用域為其後的程序,還要做參數代換。

  5. 格式:數組大小常用宏定義。

  6. 預處理是在編譯之前的處理。

  7. 宏定義又稱為宏代換; ",利用宏則可以設法得到多個值。

  8. 宏展開使源程序變長。

  9. 函數只有一個返回值,預處理不做語法檢查。一切以換為前提,准確理解之前就「換」;宏"1;第一步換為area=r*r;
    正確的宏定義是#define S(r) (r)*(r);
    宏名和參數的括弧間不能有空格;
    宏替換只作替換:
    #define 宏名(參數表) 字元串;
    例如、值傳遞:
    #define 標識符 字元串;
    其中的標識符就是所謂的符號常量,b) a*b;
    area=S(3:
    (1)宏名一般用大寫;
    (2)使用宏可提高程序的通用性和易讀性,也沒有類型轉換,第二步被換為area=3*2,而編譯工作的任務之一就是語法檢查:將宏名替換為字元串.帶參數的宏、做任何事情之前先要換,並且分配內存。
    預處理(預編譯)工作也叫做宏展開;中永遠不包含宏。
    (3)宏定義不分配內存;
    (4)宏定義寫在函數的花括弧外邊; ,不做計算:
    #define PI 3,第二步被換為area=a+b*a+b:
    (5)實參如果是表達式容易出問題:
    #define S(r) r*r
    area=S(a+b)。
    即在對相關命令或語句的含義和功能作具體分析之前就要換;
    類似於函數調用。
    格式.1415926。
    把程序中出現的PI全部換成3。
    (6)可以用#undef命令終止宏定義的作用域。
    (7)宏定義可以嵌套。
    (8)字元串",變數定義分配內存,通常在文件的最開頭。1415926說明,也稱為「宏名」,簡稱「宏」、宏替換。

D. C語言的編譯系統對宏命令的處理

前言:宏實質就是編譯器在對代碼進行編譯之前進行的一個「查找替換」工作,就跟你在處理文檔時用WPS/WORD/記事本等進行「查找替換」操作一樣。
C語言的編譯系統對宏命令的處理是()
A。在程序運行時進行的
B。在對源程序中其他成分正式編譯之前進行的
C。在程序連續時進行的
D。和C程序中的其他語句同時進行編譯
答:選B。在對源程序中其他成分正式編譯之前進行的
2,
#defineN2/*在預編譯時將用下面代碼中N替換成2*/
#defineMN+1/*在預編譯時將M替換成N+1(即2+1,N會再被替換成2)*/
#defineNUM2*M+1/*如上:在預編譯時NUM替換成2*M+1,即2*N+1+1,即2*2+1+1*/
main()
{inti;
for(i=1;i<=NUM;i++)printf("%d\n",i);
/*
*如上所述,上句展開為:for(i=1;i<=2*2+1+1;i++)printf("%d\n",i);
*所以:循環將執行6次
*/
}
/*切記注意:每一個宏百進行替換時只是替換「正文」中的內容,而不包括預編譯語句的內容,否則就會像不少人理解的那樣,錯誤地認為第2個題中的循環將執行7次*/

E. 宏的展開是在編譯程序中展開的

是的,在編譯器的預處理過程中展開的

F. C語言編譯系統對宏替換的處理是在什麼時候進行的

是正式工作開始之前的准備工作,所以宏替換是在對程序編譯之前進行的。

宏替換是C/C++的預處理中的一部分,對於宏定義中的形參,在替換列表中,如果不是作為#或##的操作數,那麼將對應實參完全展開(相當於對實參進行求值),然後將替換列表中的形參替換掉,如果是#或##的操作數。

(6)編譯系統對程序中的宏展開是在擴展閱讀:

宏的用途在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力。

計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。

宏的行為如同是函數對自身程序文本的變形,並且可以應用全部語言來表達這種變形。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節代碼的計算。

G. c語言,說宏展開是在編譯時進行的,啥意思啥叫編譯時進行的

c語言編寫出來的代碼叫源代碼,是供人看的,如果想讓機器執行,需要轉換成機器語言,這個轉換過程就叫編譯。
在c語言中定義的宏,在編譯時,會展開(或叫替換)為實際的語句,如:
#define MAX 100
void main()
{
int a=MAX ;
printf("a=%d\n", a );
}
這里MAX是個宏,當編譯時,這段代碼就會變成:
void main()
{
int a=100; //這里的MAX會變成100
printf("a=%d\n", a );
}
這就是宏展開、宏替換,然後編譯器,按這樣子的源代碼進行編譯,生成執行程序

H. c語言中的「宏」是指什麼

是一種批量處理的稱謂。計算機科學里的宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式。

「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
計算機語言如C語言或 匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。

在Objective-C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,被定義為宏的標識符稱為宏名。在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字元串去替換,這稱為宏替換或宏展開。

宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。在Objective-C語言中,宏分為有參數和無參數兩種。

(8)編譯系統對程序中的宏展開是在擴展閱讀

A類宏是用G65 Hxx P#xx Q#xx R#xx或G65
Hxx P#xx Qxx
Rxx格式輸入的,xx的意思就是數值,是以um級的量輸入的,比如你輸入100那就是0.1MM #xx就是變數號,變數號就是把數值代入到一個固定的地址中,固定的地址就是變數。

一般OTD系有#0~#100~#149~#500~#531.關閉電源時變數#100~#149被初始化成「空」,而變數#500~#531保持數據。我們如果說#100=30那麼現在#100地址內的數據就是30了。

B類宏能完成某一功能的一系列指令像子程序那樣存入存儲器,用戶可以設定M、S、T、G代碼調用它們,使用時只需給出這個指令代碼就能執行其功能,也可以像調用子程序一樣使用。

I. C程序中的宏展開是在()。

C:編譯前預處理時進行的
#是編譯預處理指令,以#開頭的操作就是編譯預處理
包含#include在內的都是在編譯預處理時進行處理,處理完成後再把新的代碼交給編譯器進行編譯

J. 什麼是宏謝謝

計算機概念

什麼是宏

計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。Excel 辦公軟體自動集成了「VBA」高級程序語言,用此語言編制出的程序就叫「宏」。使用「VBA」需要有一定的編程基礎和耗費大量的時間,因此,絕大多數的使用者僅使用了Excel的一般製表功能,很少使用到「VBA」。
解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱為宏展開器。宏這一術語也常常被用於許多類似的環境中,它們是源自宏展開的概念,這包括鍵盤宏和宏語言。絕大多數情況下,使用「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。
宏的用途在於自動化頻繁使用的序列或者是獲得一種更強大的抽象能力--但這常常是一回事。
計算機語言如C或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C 程序員可以獲得更精巧的宏。
Lisp類語言如Common Lisp和Scheme有更精巧的宏系統: 宏的行為如同是函數對自身程序文本的變形,並且可以應用全部語言來表達這種變形。一個C宏可以定義一段語法的替換,然而一個Lisp的宏卻可以控制一節代碼的計算。
獲得了控制代碼的執行順序(見惰性計算和非限制函數)的能力,使得新創建的語法結構與語言內建的語法結構不可區分。例如,一種Lisp 方言有 cond 而沒有if ,就可以使用宏由前者定義後者。Lisp 語法的去部主要擴展,比如面向對象的CLOS 系統,可以由宏來定義。

宏的典型應用

加速日常編輯和格式設置
組合多個命令
使對話框中的選項更易於訪問
使一系列復雜的任務自動執行

宏編程介紹

在用一種不熟悉的宏語言進行宏編程時,可以這樣做,首先記錄下用戶想要宏完成什麼,然後打開宏文件並嘗試理解命令結構如何工作。也可以修改命令以調整宏。一些宏語言,比如Great Plains賬務(?accounting)軟體的 Dexterity 運行時引擎,不能從其它數據源(如由逗號分隔的文本文件)導入數據。這一限制可以通過用更強大的編程語言,如 VBA 來創建一個計算機程序在此弱編程語言里生成一個特別的宏來解決。例如,可以對 Microsoft Excel 宏編程從擴展樣式表或文本文件中讀取數據並創建 Great Plains .mac 文件,這一文件被用於將特定的數據導入 Great Plains. 需要針對每一個新的數據集合聲稱新的 .mac 文件。

鍵盤宏

鍵盤宏和編輯器宏分別在圖形用戶界面和編輯器中被互動式地使用。使用它們可以用簡短的擊鍵代替冗長的命令序列,並為重復性任務提供了一個簡單的自動化形式。
程序員的文本編輯器 Emacs (「編輯宏」[Editing MACroS]的簡稱)是沿用這一思想的產物。事實上,大多數編輯器是由宏組成的,Emacs 最初被設計為編輯語言 TECO 的宏集,後被移植為 Lisp 的一中方言 Emacs Lisp。

宏語言

宏語言是一類編程語言,其全部或多數計算是由擴展宏完成的。宏語言並未在通用編程中廣泛使用,但在文本處理程序中應用普遍。例如,
C preprocessor C 預處理器
Internet Macros(iOpus)
M4(如前所述,源於AT&T,捆綁於Unix)
宏定義
c程序提供的預處理功能之一。包括帶參數的宏定義和不帶參數的宏定義。具體是指用一個指定的標志符來進行簡單的字元串替換或者進行闡述替換。形式為:
#define 標志符(參數表) 字元串
宏名
在上定義中的標志符被稱為「宏名」。
宏展開
在c程序編譯時將宏名替換成字元串的過程稱為「宏展開」。

微軟Word和宏病毒

Visual Basic for Applications (VBA),是 Microsoft Office 里的一種編程語言. 但由上面的定義,它完全不是一種宏語言。然而,它的功能已經從中發展並最終替代了用戶應用程序的宏思想,所以他被廣泛地錯誤地稱為是一種宏語言。
VBA 可以訪問許多操作系統函數並支持文檔打開時自動執行宏。這使得用這種語言寫計算機病毒成為可能。1990年代中後期,宏病毒成為了最流行的計算機病毒類型之一。其它的包括宏語言的項目,如openoffice.org,故意從其宏語言中排除了一些功能(如:自動執行)以避免破壞程序。然而,這一特性在很多事務中受到歡迎。

熱點內容
c存儲指針 發布:2025-05-13 21:49:04 瀏覽:921
結繩編程軟體 發布:2025-05-13 21:49:03 瀏覽:850
解壓體育館 發布:2025-05-13 21:27:48 瀏覽:263
哪家編程課 發布:2025-05-13 21:27:04 瀏覽:895
為什麼文件要壓縮 發布:2025-05-13 21:16:07 瀏覽:50
區域網怎麼搭建校時伺服器 發布:2025-05-13 21:11:32 瀏覽:677
存儲器讀寫實驗心得 發布:2025-05-13 21:09:23 瀏覽:15
派派手機如何設置密碼 發布:2025-05-13 21:08:02 瀏覽:774
獄辱實驗棟第2集在線ftp 發布:2025-05-13 21:02:06 瀏覽:11
安卓桌面應用如何變大 發布:2025-05-13 20:59:39 瀏覽:361