C將巨集用於標誌

2021-10-10 17:09:08 字數 2655 閱讀 8768

在windows api 使用過程中可以見到幾個巨集用按位或一起運算

messagebox

(null,_t

("null"),

_t("null"

), mb_iconerror | mb_okcancel)

;

巨集: mb_iconerror 的值為: 0x00000010 = 16 = 10000

巨集: mb_okcancel 的值為: 0x00000001 = 1 = 00001

用按位或運算後值為: 0x00000011 = 17 = 10001

根據按位與的特性組成這樣:

int temp = mb_iconerror | mb_okcancel;

if(temp & mb_iconerror)

printf

("mb_iconerror 存在\n");

if(temp & mb_okcancel)

printf

("mb_okcancel 存在\n");

if(temp & mb_iconquestion)

printf

("mb_iconquestion 存在\n"

);

輸出:

mb_iconerror 存在

mb_okcancel 存在

定義了5個巨集:

#define cpan_text1      2

#define cpan_text2 4

#define cpan_text3 8

#define cpan_text4 16

#define cpan_text5 32

注意值的規律(2的冪)。

int cpan_value1 = cpan_text1 | cpan_text2 | cpan_text3;

//14

int cpan_value2 = cpan_text5 | cpan_text4 | cpan_text1;

//50

int cpan_value3 = cpan_text4 | cpan_text3;

//24

int cpan_value4 = cpan_text5 | cpan_text3 | cpan_text1 | cpan_text2;

//46

int cpan_value5 = cpan_text3 | cpan_text5 | cpan_text2;

//44

int cpan_value6 = cpan_text1;

//2//注意 & 和 && 的區別

//使表示式為真

if(cpan_value1 & cpan_text1 && cpan_value1 & cpan_text2 && cpan_value1 & cpan_text3)

else

printf

("cpan_value1 值並未完全匹配\n");

//表示式為真 排列順序不同也可以

if(cpan_value2 & cpan_text5 && cpan_value2 & cpan_text1 && cpan_value2 & cpan_text4)

else

printf

("cpan_value2 值並未完全匹配\n");

//表示式為假 cpan_text4 值不同不行

if(cpan_value3 & cpan_text2 && cpan_value3 & cpan_text3)

else

printf

("cpan_value3 值並未完全匹配\n");

//為真 少乙個值也可以

if(cpan_value4 & cpan_text1 && cpan_value4 & cpan_text2 && cpan_value4 & cpan_text3)

else

printf

("cpan_value4 值並未完全匹配\n");

//為假 多乙個值 cpan_text3

if(cpan_value5 & cpan_text4&&cpan_value5 & cpan_text5 && cpan_value5 & cpan_text2 && cpan_value5 & cpan_text3)

else

printf

("cpan_value5 值並未完全匹配\n");

//正確

if(cpan_value6 & cpan_text1)

else

printf

("cpan_value6 值並未完全匹配\n"

);

輸出:

cpan_value1 值全部匹配

cpan_value2 值全部匹配

cpan_value3 值並未完全匹配

cpan_value4 值全部匹配

cpan_value5 值並未完全匹配

cpan_valu6e 值全部匹配

在定義標誌巨集時,代表的值最好是2的冪。

源**:github

參考文獻:

用於除錯的巨集

在linux程式設計中,gdb是個不錯的除錯工具。但是當檔案數量上百,甚至上千之後,使用gdb除錯就是一場災難。因此在程式中加入合理的列印資訊,能更高效的定位到問題的所在。下面就是定義的巨集。分別是warning,info,error。利用了,file function line 變數。cpp vi...

inline用於替代巨集函式

在c c 中 一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 取代這種形式的原因如下 1 c中使用define這種形式...

CDEFINES用於定義C語言使用的巨集定義

cdefines用於定義c語言使用的巨集定義 系統定義的環境變數是沒法在c語言和組合語言中起作用的,如果非要這樣做 可以按照以下的步驟 1 在bsp根目錄中修改 bat 檔案,add set is lcd 240x320 1 2 在bsp根目錄中修改sources.cmn 檔案,add if is ...