ifdef和 ifndef的功能

2021-10-23 23:14:22 字數 1521 閱讀 6319

兩個功能

1.不同點.c檔案包含同乙個.**件,想用這個.**件的標頭檔案可以用#ifdef

例如globe.h

#ifdef extern

extern

char globle_str;

#else

int i=11;

#endif

main.c

#define extern    

//定義巨集extern後

#include

"globe.h"

#include

void

output()

main_1.c

#include

"globe.h"

void

output()

;int

main()

2.條件編譯時用,例如想在debug下編譯輸出,在release

********************************************­

#ifdef 識別符號

程式段1

#else

程式段2

#endif

它的作用是:當識別符號已經被定義過(一般是用#define命令定義),則對程式段1進行編譯,否則編譯程式段2。

其中#else部分也可以沒有,即:

#ifdef

程式段1

#denif

#include

#include

intmain()

return0;

}

寫的makefile:

#! /bin/sh

ver = debug

ifeq (

$(ver)

,debug)

all:debugprint

endif

ifeq (

$(ver)

,release)

all:releaseprint

endif

debugprint:welcome.do

gcc welcome.do -o debug

rm -f welcome.do

releaseprint:welcome.ro

gcc welcome.ro -o release

rm -f welcome.ro

welcome.do:welcome.c

gcc -c -g -ddebug welcome.c -o welcome.do

welcome.ro:welcome.c

gcc -c -o3 welcome.c -o welcome.ro

這樣就會在debug時編譯輸出hello,release時不編譯printf那行。

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