巨集定義親民級別,入門級別,常用方便巨集定義

2021-10-04 17:27:19 字數 1249 閱讀 1678

#include

#include

using

namespace std;

const

double eps =

1e-8

;//const只是用來定義常量,常量在**中一直存在,但define是預處理功能,有本質區別

const

int maxx=

0x7f7f7f7f

;//0x7f7f7f7f表示資料的無窮大

//常用的浮點數比較巨集定義:

#define equ(a,b) ((fabs((a)-(b)))<(eps))

//等於

#define more(a,b) (((a)-(b))>(esp))

//大於

#define less(a,b) (((a)-(b))<(-esp))

//小於

#define moreequ(a,b) (((a)-(b))>(-esp))

//大於等於

#define lessequ(a,b) (((a)-(b))<(esp))

//小於等於

#define max( x, y ) ( ((x) > (y)) ? (x) : (y) )

////使用了algorithm標頭檔案就可以直接使用max函式;

#define min( x, y ) ( ((x) < (y)) ? (x) : (y) )

#define ll long long

#define pi 3.1415926

#define eps 1e-8

#define conn(x,y) x##y

intmain()

巨集定義很好用,很方便,但其中也有很大邊界效應弊端:

例如#define n 100

#define m 200 + n

當你在程式中使用 m*n 時,原本想要的應該是100 * (200+ n ),而實際上,編譯器卻給你變成了 100 * 200 + n,這就是所謂的邊際效應,說白了,就是替換出現了錯誤。

為了避免錯誤:

1.求值巨集要用括號括起來,避免產生二意。

2.對於帶引數的巨集,在巨集體中引用巨集引數時,最好也把引數用括號括起來,否則會產生歧義。

3.避免多次求值,應定義乙個本地變數暫存所有會被引用多次的巨集引數。

4.對於非求值的巨集,即**塊巨集,用do while(0)包圍**塊,防止產生意外**。

linux 菜鳥入門級別

最近手上是的工作不多,閒的慌,就想弄個linux玩玩 裝的是vm linux redhat9 2。4。20 8 的核心 下面是我實現核心模組編譯平台的筆記,現在記錄下來希望對碰到和我一樣問題的朋友有幫助。首先vi hello.c 原程式網上的個篇pdf文件 define module include...

MySQL基礎總結(入門級別)

3.1 文字類 3.2 數字類 3.3 日期類 查詢 select from 表名 where 條件 select 列名,列名,列名.from 表名 where 條件 插入 insert into 表名 values 值1,值2,插入 insert into 表名 列1,列2,values 值1,值...

入門級別SLAM綜述整理

車輛專業普通高校研究實習生一枚,剛入門接觸slam,目前只看了綜述,開個部落格,記錄一下自己的學習過程,如果有人能看到,希望不吝賜教,指明方向和道路,萬分感謝啦 slam入門基礎框架 感覺要學的東西真?多,學車輛的搞這個讓人頭大呀 雷射slam框架核心,一般分為四個模組 前端掃瞄匹配 後端優化 閉環...