當前位置:首頁 » 編程語言 » c語言宏定義中的
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言宏定義中的

發布時間: 2023-02-23 16:04:41

c語言宏定義

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

㈡ c語言宏定義存儲的什麼類型

宏定義存儲的類型有static 、auto、extern、及register,函數默認的存儲類型應該是extern,意思是具有外部鏈接性的。一般來說,會通過extern來聲明函數。

存儲具有如下特點:索引從 0 開始,數組在內存中占據連續的位元組單元。數組占據的位元組單元數等於數組元素個數乘以該數組所屬數據類型的數據占據的位元組單元數(元素個數乘以元素類型大小)。數組元素按順序連續存放。

宏定義格式:

#define 標識符,字元串。其中的標識符就是所謂的符號常量,也稱為「宏名」。

預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。

㈢ c語言宏定義

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

㈣ c語言的宏定義有哪些技巧

(一)宏定義中的##
連接符與#

##
連接符號由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串(token)聯接起來,從而形成一個新的子串。但它不可以是第一個或者最後一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理里有詳盡的解釋,但不知道也無所謂。同時值得注意的是#符是把傳遞過來的參數當成字元串進行替代。下面來看看它們是怎樣工作的。這是msdn上的一個例子。
假設程序中已經定義了這樣一個帶參數的宏:
#define
paster(
n
)
printf(
"token"
#n
"
=
%d",
token##n
)
同時又定義了一個整形變數:
int
token9
=
9;
現在在主程序中以下面的方式調用這個宏:
paster(
9
);
那麼在編譯時,上面的這句話被擴展為:
printf(
"token"
"9"
"
=
%d",
token9
);
注意到在這個例子中,paster(9);中的這個」9」被原封不動的當成了一個字元串,與」token」連接在了一起,從而成為了token9。而#n也被」9」所替代。
可想而知,上面程序運行的結果就是在屏幕上列印出token9=9
(二)"\"與一個較長佔多行的宏
宏定義中允許包含兩行以上命令的情形,此時必須在最右邊加上"\"且該行"\"後不能再有任何字元,連注釋部分都不能有,下面的每行最後的一定要是"\","\"後面加一個空格都會報錯,更不能跟注釋。
#define
exchange(a,b)
{\
int
t;\
t=a;\
a=b;\
b=t;\
}

㈤ C語言中的宏定義如何使用

宏定義又稱為宏代換、宏替換,簡稱"宏"。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為"宏名"。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是"換"。一切以換為前提、做任何事情之前先要換,准確理解之前就要"換"。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define Pi 3.1415926
把程序中出現的Pi全部換成3.1415926

㈥ C語言問題,宏定義中的參數為什麼要定義,不是主函數中的參數直接替換嗎

首先你要理解什麼是預處理命令#define。它的作用是:在編譯之前,對#define的參數在作用范圍內進行替換操作。如:

#define A 2
int b = A; // 在編譯之前,這行代碼會被替換成: int b = 2;
所以#define只是替換,可沒有定義相關的參數。用這道題來舉個例子:
#define JH(a, b, t) t=a; a=b; b=t;
int t, a=1, b=2;
JH(a, b, t); // 在編譯之前,這行代碼會被替換成: t=a; a=b; b=t;
所以如果沒有定義t,那麼t=a; b=t; 就會報錯。而且如果你沒定義t,你又是如何使用
JH(a, b, t)呢?因為你必須寫出第三個參數。還有就是要注意在最後它少加了一個分號:
#define JH(a, b, t) t=a; a=b; b=t // 題目中t後面沒有分號
這是為了以函數的形式使用宏定義,同時也表明#define只是簡單的替換,並不是執行代碼。這樣的用法是十分常見的。

㈦ 在C語言中 宏定義是什麼

宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。

宏定義又稱為宏代換、宏替換,簡稱「宏」。

(7)c語言宏定義中的擴展閱讀:

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

解釋器或編譯器在遇到宏時會自動進行這一模式替換。對於編譯語言,宏展開在編譯時發生,進行宏展開的工具常被稱為宏展開器。

宏這一術語也常常被用於許多類似的環境中,它們是源自宏展開的概念,這包括鍵盤宏和宏語言。絕大多數情況下,「宏」這個詞的使用暗示著將小命令或動作轉化為一系列指令。

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSIC,作為C語言最初的標准。

目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。

C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。

其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、TurboC等。

參考資料:

宏定義-網路

C語言-網路

㈧ 宏定義c語言是什麼意思

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

C語言中,預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,並對源代碼進行相應的轉換,預處理過程還會刪除程序中的注釋和多餘的空白符號。

預處理指令是以#開頭的代碼行,#必須是該行除了空白字元外的第一個字元。#後是指令關鍵字,在#和指令關鍵字之間允許存在若干空白字元。

宏的用途

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

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

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

以上內容參考:網路-宏定義

㈨ C語言宏定義中的#

說一點個人見解:

#define CAT(c) "123"#c

你這條語句的意思是宏定義一個叫做CAT的函數,它的參數是CAT(c)中的c,而CAT還是由123替換(這里希望你能理解,如:#define pi 3.14,就可以理解為3.14替換了pi),你已經知道對於#之後的內容會默認將之後的內容當作字元串來替換,那麼現在我們再來看一下你的兩個printf語句:

  1. printf("CAT(c):%s ",CAT(c));//你這里傳入的參數是什麼?是c,所以輸出的也是c,而前面的CAT是不變的,總是123

  2. printf("CAT(abc):%s ",CAT(abc));//同上,你這里傳入的參數就是abc了,所以輸出也是abc

這就是我的一點理解,如果你有問題我們可以在來討論,歡迎。