兩個功能
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 ...