C語言簡明講解預編譯的使用
小復習
預處理,預編譯是編譯的第一步。
會有三件基本的事情發(fā)生:
- 引入#include
- 去除注釋
- 修改#define
1、內(nèi)置符號
這些符號都可以直接使用:
__FILE__ 點c文件全名
__LINE__ 當前行號
__DATE__ 編譯日期
__TIME__ 編譯時間
舉例:
#include<stdio.h> int main() { printf("文件全名:%s\n", __FILE__); printf("當前運行行號:%d\n", __LINE__); printf("編譯日期:%s\n", __DATE__); printf("編譯時間:%s\n", __TIME__); return 0; }
效果:
2、自定義符號
#define 名 值
不帶分號。預編譯階段,所有名字會被值替換。
舉例:給printf取個別名。
#include<stdio.h> #define say printf int main() { say("你好,世界!\n"); return 0; }
效果:
舉例:自定義一個死循環(huán)符號。
#include<stdio.h> #define loop while(1) int main() { int i = 0; loop{ if (i > 1000) { break; } else { printf("你好,世界!\t%d\n",i); i++; } } return 0; }
效果:
3、自定義宏
和自定義符合差不多。
相當于函數(shù),只不過在預編譯的階段就會執(zhí)行。
然后替換掉。
#define 名 ( 參數(shù)列表 ) 表達式
舉例:輸出字符串。
#include<stdio.h> #define say(s)printf(s) int main() { say("你好,世界!\n"); return 0; }
效果:
替換邏輯:遞歸。
看參數(shù)有沒有define,有就套娃。
直到?jīng)]有,替換自己。
字符串內(nèi)部的符號會被忽略。
4、條件編譯
可以用#define定義一個符號,代表是否要執(zhí)行。
#include<stdio.h> #define __DEBUG__ 1 int main() { if (__DEBUG__) { printf("調(diào)試模式開啟\n"); } else { printf("調(diào)試模式關閉\n"); } return 0; }
效果:
同時,可以讓這段代碼直接跳過編譯。
#include<stdio.h> #define __DEBUG__ 1 int main() { #if __DEBUG__ printf("調(diào)試模式開啟\n"); #endif return 0; }
這種寫法也有配套的選擇分支。
#include<stdio.h> #define __DEBUG__ 0 #define __WARN__ 1 int main() { #if __DEBUG__ printf("調(diào)試模式\n"); #elif __WARN__ printf("警告模式\n"); #else printf("正常模式\n"); #endif return 0; }
效果:
到此這篇關于C語言簡明講解預編譯的使用的文章就介紹到這了,更多相關C語言預編譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)
下面小編就為大家?guī)硪黄猚++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09簡要說明C語言中指針函數(shù)與函數(shù)指針的區(qū)別
這篇文章主要介紹了C語言中指針函數(shù)與函數(shù)指針的區(qū)別,指針函數(shù)和函數(shù)指針是C語言入門學習中的基礎知識,需要的朋友可以參考下2016-04-04簡單掌握C++編程中的while與do-while循環(huán)語句使用
這篇文章主要介紹了C++編程中的while與do-while循環(huán)語句使用,區(qū)別就是while是先判斷再執(zhí)行,而do-while是先執(zhí)行再判斷,需要的朋友可以參考下2016-01-01