python展開 c函數中的宏預處理_C中的預處理宏

C中的預處理宏

宏定義就屬于預處理命令的一種。那么,什么是宏呢?

宏:c語言標準允許在程序中用一個標識符來表示一個字符串。標識符就是宏名。

宏替換:宏替換就是宏定義。在編譯預處理中,將程序中所有的宏名用相應的字符串來替換,這個過程稱為宏替換。

宏分為兩種:

1、無參數宏?? #define 標識符 字符串

2、帶參數宏?? #define 標識符(形參表) 字符串

因為無參數宏比較簡單,所以重點說一下帶參數宏。

有參宏定義中#的用法

#define?STR(str)?#str

#用于把宏定義中的參數兩端加上字符串的""

比如,這里STR(my#name)會被替換成"my#name"

一般由任意字符都可以做形參,但以下情況會出錯:

STR())這樣,編譯器不會把“)”當成STR()的參數。

STR(,)同上,編譯器不會把“,”當成STR的參數。

STR(A,B)如果實參過多,則編譯器會把多余的參數舍去。

STR((A,B))會被解讀為實參為:(A,B),而不是被解讀為兩個實參,第一個是(A第二個是B)。

一個預處理宏的例子:

# define PRINT(STR,VAR) cout<

跟在宏名后面的括號中的參數會被閉括號后面的所有代碼替代。只要在調用宏的地方,預處理程序就刪除名字PRINT并替換代碼,所以使用宏名時編譯器不會報告任何錯誤信息,它并不對參數做任何類型檢查。

有參宏定義中##的用法

#define?WIDE(str)?L##str

則會將形參str的前面加上L

比如:WIDE("abc")就會被替換成L"abc"

如果有#define?FUN(a,b)?vo##a##b()

那么FUN(id?ma,in)會被替換成void?main()

另一個例子:

# define P(EX) cout<

其中的“#”被稱為:字符串化的預處理特征,其作用是獲得任何一個表達式并把它轉換為一個字符數組。

多行宏定義:

#define?doit(m,n)?for(int?i=0;i

{\

m+=i;\

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(轉) 中斷處理程序中斷服務例程

關于中斷處理程序和中斷服務例程ISR的區別及聯系&#xff0c;之前一直搞混&#xff0c;今天抽時間將兩者關系弄弄清楚。ok,下面進入主題。首先中斷處理程序(Interrupt Handler)和中斷服務例程ISR(Inerrupt Service Routine)是兩個不同的概念.簡單來說就是&#xff0c;一條中斷線…

使用SQL:2003 MERGE語句的奧術魔術

時不時地&#xff0c;由于以下任何原因&#xff0c;我們不得不將INSERT與UPDATE區分開來感到尷尬&#xff1a; 我們必須至少發表兩個聲明 我們必須考慮性能 我們必須考慮比賽條件 我們必須在[UPDATE; 如果UPDATE_COUNT 0 THEN INSERT]和[INSERT; 如果例外然后更新] 我們必…

Swing 學習小記

初學Swing一路問題&#xff0c;一路學習 問題一&#xff1a;JPanel中動態組件添加&#xff0c;刷新問題&#xff1f; 錯誤一&#xff1a;使用repaint()方法&#xff0c;以為可以刷新&#xff0c;可行不通。 錯誤繼續發生&#xff1a;還是使用repaint()方法&#xff0c;與之前不…

leetcode Spiral Matrix

題目連接 https://leetcode.com/problems/spiral-matrix/ Spiral Matrix Description Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [   [ 1, 2, 3 ],   [ 4, 5…

python學生類出不來中文_Python 這類看起來學習門檻低的語言,是否真的適合入門編程學習?...

Python(計算機程序設計語言)Python是一種跨平臺的計算機程序設計語言。 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。最初被設計用于編寫自動化腳本(shell)&#xff0c;隨著版本的不斷更新和語言新功能的添加&#xff0c;越多被用于獨立的、大型項目的開…

克隆可序列化和不可序列化的Java對象

開發人員經常依靠3d方庫來避免重新發明輪子&#xff0c;尤其是在Java世界中&#xff0c;Apache和Spring這樣的項目如此盛行。 在處理這些框架時&#xff0c;我們通常很少或根本無法控制其類的行為。 這有時會導致問題。 例如&#xff0c;如果您想深度克隆不提供合適克隆方法的對…

2014編程之美資格賽

2014 編程之美挑戰賽 --- 資格賽真題 題目1 : 同構 時間限制:2000ms單點時限:1000ms內存限制:256MB描述 給定2個樹A和B&#xff0c;保證A的節點個數>B的節點個數。 現在你需要對樹A的邊進行二染色。 一個好的染色方案&#xff0c;指不存在一個樹A中的連通塊&#xff0c;同時…

JavaScript之面向對象學習六原型模式創建對象的問題,組合使用構造函數模式和原型模式創建對象...

一、仔細分析前面的原型模式創建對象的方法,發現原型模式創建對象,也存在一些問題&#xff0c;如下&#xff1a; 1、它省略了為構造函數傳遞初始化參數這個環節,結果所有實例在默認的情況下都將取得相同的屬性值&#xff0c;這還不是最大的問題&#xff01; 2、最大的問題是原型…

stand up meeting 12/11/2015

part組員今日工作工作耗時/h明日計劃工作耗時/hUI馮曉云完成單詞釋義熱度排序&#xff1b;允許用戶自主添加釋義&#xff1b;完成了button位置的修正&#xff08;finally&#xff09;和彈窗的美化&#xff1b; 6try the backup plan 6PDF Reader朱玉影 完成了pdf文件的打…

ssrf漏洞內網滲透_滲透技巧之SSRF

SSRF——服務端請求偽造&#xff0c;上一篇&#xff0c;我談到了CSRF客戶端請求偽造&#xff0c;這個是我們通過攻擊用戶&#xff0c;引誘客戶點擊我們偽造好的表單&#xff0c;從而達到我們攻擊的目的&#xff0c;是從客戶端發起的&#xff0c;那么SSRF服務端請求偽造當然是通…

引入故意緩存

幾周前&#xff0c;我參加了ThoughtWorks 技術雷達研討會。 我在ThoughtWorks工作了多年&#xff0c;想想是否有人知道這些人在軟件開發方面的發展趨勢。 在技??巧上帶有上升箭頭的數字中&#xff0c;第17位被稱為“周到緩存”。 和斯科特肖一起喝酒時&#xff0c;我問他是什…

(小議)面向對象

什么是面向對象&#xff1f;如果讓我理解&#xff0c;只有一句話&#xff1a;它是一個與面向過程相對的概念&#xff0c;是一種進化或者升級。人們所設計的程序幾乎都是線性思維&#xff0c;即一步一步往下執行。對于一個沒有人機交互的簡單程序來說&#xff0c;這是簡單易行的…

int類型究竟占幾個字節

最近在看深入理解計算機系統這本書&#xff0c;上面提到了在32位機器和64機器中int類型都占用4個字節。后來&#xff0c;查了The C Programming language這本書&#xff0c;里面有一句話是這樣的&#xff1a;Each compiler is free to choose appropriate sizes for its own ha…

python fieldnames_csvreader.fieldnames在python中未被識別為csv reader對象的屬性

我試圖使用CSV模塊在Python中提取CSV文件的標題.CSV文件非常扁平,看起來像&#xff1a;This, That, The Other1, 2, 3我正在做以下事情&#xff1a;>讀入CSV文件并制作閱讀器對象>將讀者的迭代器推到下一行,強制它至少訪問第一行一次(來自csv模塊文檔&#xff1a;“如果在…

Spring Insight – Web應用程序分析

您是否正在使用Spring Framework編寫Web應用程序&#xff1f; 您是否曾經想過引擎蓋下發生了什么&#xff1f; 為什么您的應用程序響應如此緩慢&#xff1f; 在您仍然等待應用程序響應的同時&#xff0c;為什么窗外的蝸牛如此之快地消失在遠處&#xff1f; 您應該:)&#xff0c…

創建動態鏈接庫時設置導出函數的方法

有兩種方法1.使用模塊定義文件, 2.在要導出的函數前加上 __declspec(dllexport) 我們用VS2008新建個DLL工程&#xff0c;工程名為“TestDLL” 把默認的源文件后綴 .CPP改為.C&#xff08;C文件&#xff09; int _stdcall MyFunction(int iVariant){return 0; } 1. 使用傳統的模…

javascript的瀏覽器Bom詳解,window、location、history對象

BOM(BrowserObjectModel)也叫瀏覽器對象模型&#xff0c;描述與瀏覽器進行交互的方法和接口。BOM由多個對象組成&#xff0c; 其中代表瀏覽器窗口的Window對象是BOM的頂層對象&#xff0c;其他對象都是該對象的子對象。 JavaScript由三部分組成&#xff1a;ECMAScript,BOM&…

python右斜杠_Python中的左斜杠、右斜杠(正斜杠和反斜杠)

首先&#xff0c;"/"左傾斜是正斜杠,"\"右傾斜是反斜杠,可以記為&#xff1a;除號是正斜杠一般來說對于目錄分隔符&#xff0c;Unix和Web用正斜杠/&#xff0c;Windows用反斜杠&#xff0c;但是現在Windows(一)目錄中的斜杠們python讀文件需要輸入的目錄參…

重用生成的JAXB類

在本文中&#xff0c;我將演示如何利用– XJC擴展來重用以前從XML模式生成的類。 當其他XML架構導入XML架構并且您不想每次都生成相同的類時&#xff0c;這很有用。 導入的架構&#xff08;Product.xsd&#xff09; 以下XML模式代表有關產品的基本信息。 產品是此示例域中的常…

MySQL的Master/Slave群集安裝和配置

本文介紹MySQL的Master/Slave群集安裝和配置&#xff0c;版本號安裝最新的穩定版GA 5.6.19。 為了支持有限HA。我們用Master/Slave讀寫簡單孤立的集群。有限HA這是當Master不可用&#xff0c;數據不會丟失。但在Master寫的&#xff0c;必須手工處理故障。假設要支持更高的可用性…