強大的巨集定義

2022-09-01 13:33:12 字數 1102 閱讀 2751

hhhh,關於巨集定義,現在就給大家普及一部分

最基本的定義常量

#define  pi  3.1415926

這種方式相信大家一定都知道吧

但如果是關於可變引數的呢

!!!第一種

1 #include2

3#define ojbk(s) #s //

#表示將s轉化為字元,也可以放字串,s也可以用其他字元或字串 45

intmain()

6

現在大家一定會因為這個printf根本沒打引號而感到奇怪吧。

現在我就給你們解釋一下。

先說引號吧,根據我自己的理解,引號就是將一串字母數字符號轉換為字元的工具

所以加引號就是為了轉換為字元,而我們的『#』卻可以完成這項操作。所以沒有引號我們也可以正常的執行

而ojbk()後面的就是普通操作

!!!第二種

#include#define ojbk(...)  printf(# __va_args__)  //

其中的...表示可變引數,而__va_gars__在處理中被實際引數所替換,這都是不能改變的。然後具體作用就自己敲乙個來看效果吧。

intmain()

接下來我們來說說第三種『##』

#include#define ojbk(x,y)  x  ##  y  //

##的作用就是將兩個連線起來,不過目前來說好像只發現可以連線數字

intmain()

然後還有最後一種

#include#define ojbk(format,...) printf(#format,## __va_args__)  //

format是可以修改的,表示你想要轉換成字元的一串而逗號為分隔,#不對逗號以後的起作用,所以逗號後面的不是字元

intmain()

剩下的就是巨集定義替換的騷操作了

比如說#define  hhh  scanf //這就表示hhh是scanf的同義詞,能用scanf 的地方一般hhh也可以

還有很多關於巨集定義的騷操作,我就不細說了,剩下的就靠你們自己去探索吧!

abs int 巨集定義 巨集定義和巨集方法

巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...

巨集定義及帶引數的巨集定義

include 巨集定義,通常用於定義常量,在 轉換成二進位制檔案時會將 中的巨集名稱替換成值 define 巨集名稱 值 define a 1 帶引數的巨集 fun a,b 為巨集的名稱 a b為巨集的值 帶引數的巨集比函式效率高 define fun a,b a b 為了保證替換結果,最好加入 ...

巨集定義的巨集展開錯誤

巨集定義自身的缺陷是指巨集展開錯誤,主要是由於運算子優先順序等原因,使得巨集展開後的語義與餘項發生偏差。define max a,b a b?a b define mul a,b a b int main int x 4.y 3 int max max x,y 2 int product mul x...