當前位置:首頁 » 編程語言 » 宏替換在c語言哪一部分
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

宏替換在c語言哪一部分

發布時間: 2022-04-18 15:14:12

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

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

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

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

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

(1)宏替換在c語言哪一部分擴展閱讀

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代碼調用它們,使用時只需給出這個指令代碼就能執行其功能,也可以像調用子程序一樣使用。

B. c語言宏定義

宏定義又稱為宏替換,C語言中的宏定義只是簡單的字元串替換而已。
比如
define
N
1000
在程序中遇到N就自動把N替換成1000,N不是一個變數,不能賦值。
如果你寫N=1;
相當於寫1000=1;
這編譯是通不過的,所以你使N的值改變是做不到的。
N只是一個要被替換的記號而已,連變數也不是。

C. C語言宏替換

應該看C語言教材書上的內容,那裡講的會比較詳細.
宏替換就是文本替換,注意以下程序段:

#include <stdio.h>
#define MAX 5

int main(void)
{
int a[MAX];
int i;
for (i=0;i<MAX;i++) scanf("%d",&a[i]);
return 0;
}

這個程序定義了一個自定義宏MAX,它的替換文字是5,在程序開始編譯之前,馳處理器會完成宏替換的操作,將這個程序文件中的所以MAX都替換成5,然後編譯器再執行編譯.

D. 求c語言中宏常量和宏替換的異同點

它們本質是一樣的,都是將 #define 之後的內容用另一段內容替代而已,唯一的區別就是宏常量通常是數字,而宏替換可以變得很復雜。這個就好像一個函數,f(x)=x,這樣寫的話很簡單,但是 x 也可以是很復雜的東西,例如 f(x^3)=x^3,這兩個函數都是 f,唯一的區別就是自變數的表示不一樣而已。而宏替換也是如此,我們可以給 x 一個很簡單的數字,也可以給它一個字元串,也可以給它一個很復雜的表達式,但是最終的效果都是將我們的宏定義替換一下。

E. C語言中,宏替換的替換規則

簡單來說:宏定義又稱為宏代換、宏替換,簡稱「宏」。宏替換是C/C++的預處理中的一部分,在C++標准中有4條規則來定義替換。

規則1:實參替換。

本條規則描述帶參數的宏的替換過程。

對於宏定義中的形參,在替換列表中,如果不是作為#或##的操作數,那麼將對應實參完全

展開(相當於對實參進行求值),然後將替換列表中的形參替換掉.如果是#或##的操作數,

那麼不進行替換。

規則2:多次掃描。

在所有的形參替換為實參後,對結果進行再次掃描,如果發現還有可替換的宏,則進行替換,

否則中止。

規則3:遞歸替換抑制。

如果在替換列表中發現當前正在展開的宏的名字,那麼這里不進行替換.更進一步,在嵌套

的替換過程中發現已經替換過的宏的名字,則不進行替換。

規則4:遞歸預處理抑制。

如果替換後的結果形成預處理指令,則不執行這條預處理指令。

看幾個C++標准中的例子:

#define x 3

#define f(a) f(x * (a))

#undef x

#define x 2

#define g f

#define z z[0]

#define h g(~

#define m(a) a(w)

#define w 0,1

#define t(a) a

f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);

g(x+(3,4)-w) | h 5) & m(f)^m(m);

其結果分別是

f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1);

f(2 * (2+(3,4)-0,1)) | f(2 * ( ~ 5)) & f(2 * (0,1))^m(0,1);

對於第一個,主要在於t(t(g)(0) + t)(1)的展開。

容易計算出最外層的t的實參是f(2 * (0)) + t,而作為t的參數傳入時其中的t是

正在被展開的宏,所以根據規則3,不對這個t進行處理,保持不變,得到f(2 * (0)) + t(1)。

對於第二個,h 5)被替換為g(~5),應用規則2,被替換為f(2 * ( ~ 5))。

而m(m)首先被替換為m(w),然後應用規則2再次進行替換,但是m已經是替換過的了,所以保持

不變,只對w進行替換。

#define str(s) # s

#define xstr(s) str(s)

#define debug(s, t) printf("x" # s "= %d, x" # t "= %s",

x ## s, x ## t)

#define INCFILE(n) vers ## n /* from previous #include example */

#define glue(a, b) a ## b

#define xglue(a, b) glue(a, b)

#define HIGHLOW "hello"

#define LOW LOW ", world"

debug(1, 2);

fputs(str(strncmp("abcd", "abc", 』4』) /* this goes away */

== 0) str(: @ ), s);

#include xstr(INCFILE(2).h)

glue(HIGH, LOW);

xglue(HIGH, LOW)

其結果分別是

printf("x" "1" "= %d, x" "2" "= %s", x1, x2);

fputs("strncmp("abc\0d", "abc", 』\4』) = = 0" ": @ ", s);

#include "vers2.h"

"hello";

"hello" ", world"

關鍵是glue和xglue.

對於glue(HIGH, LOW),首先有一個規則1的抑制,得到HIGHLOW;的結果,然後二次掃描,得到

"hello";

對於xglue(HIGH, LOW)沒有抑制效果,所以對參數求值,分別得到HIGH和LOW ", world",即

glue(HIGH, LOW ", world")。

然後進行連接操作得到HIGHLOW ", world",最後再掃描一次得到"hello" ", world"

如果考慮字元串的自然的連接,就可以得到"hello, world"了。

(5)宏替換在c語言哪一部分擴展閱讀

宏語言是一類編程語言,其全部或多數計算是由擴展宏完成的。宏語言並未在通用編程中廣泛使用,但在文本處理程序中應用普遍。例如, C preprocessor C預處理器Internet Macros(iOpus) M4(如前所述,源於AT&T,捆綁於Unix)

宏定義

c程序提供的預處理功能之一。包括帶參數的宏定義和不帶參數的宏定義。具體是指用一個指定的標志符來進行簡單的字元串替換或者進行闡述替換。形式為:

#define標志符[(參數表)] 字元串

宏名

在上定義中的標志符被稱為「宏名」。

宏展開

在c程序編譯時將宏名替換成字元串的過程稱為「宏展開」。

宏語言是一類編程語言,其全部或多數計算是由擴展宏完成的。宏語言並未在通用編程中廣泛使用, 但在文本處理程序中應用普遍。例如,

C preprocessorC 預處理器

Internet Macros(iOpus)

M4(如前所述,源於AT&T,捆綁於Unix)

F. c語言宏定義如何用用宏定義有什麼優點

用#define 來定義,如#define Max 100
優點:在以後的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。

G. C語言中怎樣修改宏定義呢

什麼意思?是在定義宏後的程序代碼中改,還是在編輯宏定義的時候該?
如果是前者,宏定義是在預編譯時是就決定的,在程序運行時是不能改的;如果是後者,直接改就行了。

H. C語言宏定義

宏定義又稱為宏替換,c語言中的宏定義只是簡單的字元串替換而已。
比如
define
n
1000
在程序中遇到n就自動把n替換成1000,n不是一個變數,不能賦值。
如果你寫n=1;
相當於寫1000=1;
這編譯是通不過的,所以你使n的值改變是做不到的。
n只是一個要被替換的記號而已,連變數也不是。

I. 在C語言中 宏定義是什麼

在C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。

(9)宏替換在c語言哪一部分擴展閱讀:

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

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

J. c語言帶參宏替換的參數是形參還是實參

所謂形參和實參,是指的在函數調用時,為函數參數分配的臨時變數,稱為實參。而函數定義時使用的變數名,本身並不具有內存,稱為形參。
也就是說,實參和形參都是針對函數來說的。對於宏,即使是帶參數的宏,也不能稱為形參和實參。
宏的調用,本身就是一種簡單的替換,替換的部分,甚至本身並不是一個變數或者表達式,而只是一個變數的一部分。並不具備運行特徵,即內存的分配和釋放。
宏的展開是在編譯前,即所謂的預編譯階段就完成了,而形參實參的轉換,是在運行階段完成的。