1.在代碼編譯時可以在GCC 編譯使用-D參數指定宏編譯需要編譯的代碼段。
譬如a.c代碼中有如下預定義:
#ifdefine OS_LINUX
…代碼段1
#else
…代碼段2
#endif
當使用:gcc a.c -DOS_LINUX 編譯時選擇執行代碼段1
當使用:gcc a.c 編譯時 選擇執行代碼段2
如下是實例:`
//suppot.c
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char*argv)
{
#ifdef TEST_SUPPOT
printf(" define TEST_SUPPOT\n"); //代碼段1
#else
printf("no define TEST_SUPPOT\n");//代碼段2
#endif
return 0;
}
如下是分別用-D 指定和不指宏的編譯執行效果:
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$ gcc suppot.c -DTEST_SUPPOT
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$ ./a.out
define TEST_SUPPOT
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$ gcc suppot.c
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$ ./a.out
no define TEST_SUPPOT
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
zdg@ubuntu:/mnt/hgfs/SHARE/Project/TEST$
可以看出-D指定編譯宏時執行代碼段1,未用-D指定時執行代碼段2