您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言宏定義與預處理命令怎么應用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言宏定義與預處理命令怎么應用文章都會有所收獲,下面我們一起來看看吧。
預處理階段:處理宏定義與預處理命令;
編譯期:檢查代碼,分析語法、語義等,最后生成.o或.obj文件;
鏈接期:鏈接所有的.o或.obj文件,生成可執行文件。
#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; }
作用時期:函數作用在編譯期,宏定義作用在預編譯期;
使用:函數需要利用額外的棧,因此需要額外的時間開銷,相比宏定義更加節約時間但會浪費更多空間;
函數 | 說明 |
---|---|
#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語言宏定義與預處理命令怎么應用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。