在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 ...