91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言宏定義與預處理命令怎么應用

發布時間:2022-07-02 13:54:20 來源:億速云 閱讀:134 作者:iii 欄目:開發技術

這篇文章主要介紹了C語言宏定義與預處理命令怎么應用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言宏定義與預處理命令怎么應用文章都會有所收獲,下面我們一起來看看吧。

    宏定義與預處理命令

    • 預處理階段:處理宏定義與預處理命令;

    • 編譯期:檢查代碼,分析語法、語義等,最后生成.o或.obj文件;

    • 鏈接期:鏈接所有的.o或.obj文件,生成可執行文件。

    C語言宏定義與預處理命令怎么應用

    預處理命令 - 宏定義

    定義符號常量

    #define PI 3.1415926
    #define MAX_N 10000

    定義傻瓜表達式

    #define MAX(a, b) (a) > (b) ? (a) : (b)
    #define S(a, b) a * b

    定義代碼段

    \ 為連接符

    #define P(a) { \
    	printf("%d\n", a); \
    }

    預定義的宏

    常見的預定義的宏

    說明
    __ DATE__日期:Mmm dd yyyy
    __ TIME__時間:hh:mm:ss
    __ LINE__行號
    __ FILE__文件名
    __ func__函數名/非標準
    __ FUNC__函數名/非標準
    __ PRETTY_FUNCTION__更詳細的函數信息/非標準

    示例:

    #include<stdio.h>
    int main(){
    	//首次編譯的時間
    	//[Jun 10 2022 09:46:48]
    	printf("[%s %s]\n", __DATE__, __TIME__);
    	//代碼行號:文件名:函數名
    	//[6 : E:\2023考研\專業課\C語言\define.cpp : main]
    	printf("[%d : %s : %s]\n", __LINE__, __FILE__, __func__);
    	return 0;
    }

    函數 VS 宏定義

    作用時期:函數作用在編譯期,宏定義作用在預編譯期;

    使用:函數需要利用額外的棧,因此需要額外的時間開銷,相比宏定義更加節約時間但會浪費更多空間;

    預處理命令 - 條件式編譯

    函數說明
    #ifdef DEBUG是否定義了BEBUG宏
    #ifndef DEBUG是否沒定義DEBUG宏
    #if MAX_N == 5宏 MAX_N 是否等于5
    elif MAX_N == 4否則宏MAX_N是否等于4
    #else 
    #endif 

    示例:

    #include<stdio.h>
    //定義DEBUG宏
    #define DEBUG 
    //判斷是否定義了DEBUG宏
    #ifdef DEBUG
    #define MAX_N 1000
    #else
    #define MAX_N 100
    #endif 
    int main(){
    	int arr[MAX_N + 5] = {0};
    	//如果沒定義了DEBUG宏 則結果為 420 個字節 
    	//如果定義了DEBUG宏,則結果為 4020 個字節 
    	printf("sizeof(arr) = %lu \n", sizeof(arr)); 
    	return 0;
    }

    示例

    沒有BUG的MAX宏

    #define MAX(a, b)({\
    	__typeof(a) _a = a;\
    	__typeof(b) _b = b;\
    	_a > _b ? _a:_b;\
    })

    打印LOG的函數,輸出所在函數及行號等信息

    #include<stdio.h>
    //打開log宏
    #define DEBUG
    //條件式編譯
    //變參宏
    //args加##后表連接 此時args可為空 
    #ifdef DEBUG
    #define log(format, args...){\
    	printf("[%s : %s : %d] ", __FILE__, __func__, __LINE__);\
    	printf(format, ##args);\
    	printf("\n");\
    }
    #else
    #define log(format, args...)
    #endif
    int main(){
    	int a = 123, b = 13;
    	//[E:\2023考研\專業課\C語言\log.cpp : main : 12] a = 123, b = 13
    	log("a = %d, b = %d", a, b);
    	//[E:\2023考研\專業課\C語言\log.cpp : main : 13] hello
    	log("hello");
    	return 0;
    }

    關于“C語言宏定義與預處理命令怎么應用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言宏定義與預處理命令怎么應用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    忻城县| 揭阳市| 曲靖市| 岫岩| 台前县| 开平市| 贵阳市| 治多县| 偃师市| 徐闻县| 广德县| 临安市| 额尔古纳市| 逊克县| 永昌县| 湾仔区| 滨州市| 翁牛特旗| 昌江| 定远县| 汶川县| 湟源县| 宁德市| 水城县| 丹巴县| 哈巴河县| 大宁县| 密山市| 大冶市| 兴宁市| 阳春市| 曲阜市| 沁阳市| 咸宁市| 阳高县| 阿合奇县| 米脂县| 新邵县| 铁力市| 哈巴河县| 临武县|