ifdef 和 pragma once 的區別

2021-08-30 13:53:13 字數 404 閱讀 4417

方式1:#ifdef  heat_name

#define heat_name

#endif

方式2:#pragma once 

正文:方式1用來防止某個巨集被多次定義。方式2是c++語言中的巨集定義,通過巨集定義避免檔案多次編譯,需要編譯平台的支援。他依賴巨集的名字不能重複,這不光保證同一檔案不會被包含多次,也能保證內容相同的檔案不會被不小心包含多次。他的缺點就是如果不同標頭檔案的巨集名不小心同時撞車,可能就會導致標頭檔案明明存在,卻產生了編譯器說巨集不存在的情況。

方式2是編譯相關,不同的編譯系統 上不一定能用,移植性差。它由編譯器提供保證同乙個名字的檔案不會被包含多次,而不是指內容相同的兩個檔案。缺點就是如果同乙個標頭檔案有多次拷貝,本方法不能保證被重複包含。

ifdef和 if的差別

最近專案要從windows平台移植到linux平台,所以做了很多相容性相關的工作。遇到乙個小問題,我想通過win32巨集來區分兩個平台,之前以外win32變數是自己定義到,所以我做了如下宣告 define win32 1 1 windows,0 linux 程式中這樣使用 if win32 1 do...

if和 ifdef的區別

學習stm32偶然發現 在keil中直接預先定義巨集use stdperiph driver,但是卻沒有指定巨集的值。而在標頭檔案中判斷用的是如下 1 ifdef use stdperiph driver 2 include stm32f4xx conf.h 3 endif use stdperip...

ifdef和 if的區別

1 ifdef只是判斷後面的識別符號有沒有定義,而不在乎識別符號的值,識別符號是0是1對它來說都沒有區別,只要預先定義了,執行 ifdef後的 2 ifdef是和 else搭配使用的,沒有 elif搭配之說 3 ifdef必須要有 endif配合使用 define iftest1 0 define ...