最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言詳細(xì)分析宏定義與預(yù)處理命令的應(yīng)用

 更新時間:2022年07月02日 10:44:03   作者:剛?cè)腴T的小仙女  
宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數(shù),也可以是表達(dá)式,預(yù)處理程序?qū)λ蛔魅魏螜z查,如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現(xiàn)

宏定義與預(yù)處理命令

  • 預(yù)處理階段:處理宏定義與預(yù)處理命令;
  • 編譯期:檢查代碼,分析語法、語義等,最后生成.o或.obj文件;
  • 鏈接期:鏈接所有的.o或.obj文件,生成可執(zhí)行文件。

預(yù)處理命令 - 宏定義

定義符號常量

#define PI 3.1415926
#define MAX_N 10000

定義傻瓜表達(dá)式

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

定義代碼段

\ 為連接符

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

預(yù)定義的宏

常見的預(yù)定義的宏

說明
__ DATE__日期:Mmm dd yyyy
__ TIME__時間:hh:mm:ss
__ LINE__行號
__ FILE__文件名
__ func__函數(shù)名/非標(biāo)準(zhǔn)
__ FUNC__函數(shù)名/非標(biāo)準(zhǔn)
__ PRETTY_FUNCTION__更詳細(xì)的函數(shù)信息/非標(biāo)準(zhǔn)

示例:

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

函數(shù) VS 宏定義

作用時期:函數(shù)作用在編譯期,宏定義作用在預(yù)編譯期;

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

預(yù)處理命令 - 條件式編譯

函數(shù)說明
#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宏 則結(jié)果為 420 個字節(jié) 
	//如果定義了DEBUG宏,則結(jié)果為 4020 個字節(jié) 
	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的函數(shù),輸出所在函數(shù)及行號等信息

#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考研\(zhòng)專業(yè)課\C語言\log.cpp : main : 12] a = 123, b = 13
	log("a = %d, b = %d", a, b);
	//[E:\2023考研\(zhòng)專業(yè)課\C語言\log.cpp : main : 13] hello
	log("hello");
	return 0;
} 

到此這篇關(guān)于C語言詳細(xì)分析宏定義與預(yù)處理命令的應(yīng)用的文章就介紹到這了,更多相關(guān)C語言宏定義內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ vector的用法小結(jié)

    C++ vector的用法小結(jié)

    這篇文章主要介紹了c++中,vector是一個十分有用的容器,下面對這個容器做一下總結(jié)
    2013-12-12
  • C++11中的stoi & stod用法

    C++11中的stoi & stod用法

    這篇文章主要介紹了C++11中的stoi & stod用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++?正則表達(dá)式的應(yīng)用詳解

    C++?正則表達(dá)式的應(yīng)用詳解

    正則表達(dá)式(regular?expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等
    2021-11-11
  • 用C語言模仿Python函數(shù)的實例

    用C語言模仿Python函數(shù)的實例

    下面小編就為大家?guī)硪黄肅語言模仿Python函數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • OpenCV圖像處理之常見的圖像灰度變換

    OpenCV圖像處理之常見的圖像灰度變換

    這篇文章主要介紹了OpenCV圖像處理之常見的圖像灰度變換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C++輸入輸出注意事項總結(jié)

    C++輸入輸出注意事項總結(jié)

    這篇文章主要介紹了C++輸入輸出注意事項總結(jié),對C++的輸入輸出各個注意事項進(jìn)行了很好的總結(jié),需要的朋友可以參考下
    2014-08-08
  • string居然也可以用<<和>>

    string居然也可以用<<和>>

    今天小編就為大家分享一篇關(guān)于string居然也可以用<<和>>,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C語言變長數(shù)組使用詳解

    C語言變長數(shù)組使用詳解

    這篇文章主要介紹了C語言變長數(shù)組使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語言詳解結(jié)構(gòu)體的內(nèi)存對齊與大小計算

    C語言詳解結(jié)構(gòu)體的內(nèi)存對齊與大小計算

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊與計算大小
    2022-04-04
  • MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)實現(xiàn)方法

    MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)實現(xiàn)方法

    這篇文章主要介紹了MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)實現(xiàn)方法,詳細(xì)講解了MFC中動態(tài)創(chuàng)建控件以及事件響應(yīng)的概念與實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10

最新評論

千阳县| 潜江市| 临夏市| 南靖县| 即墨市| 文成县| 基隆市| 定安县| 新乡县| 渭源县| 岐山县| 永济市| 无棣县| 文登市| 辽宁省| 海安县| 即墨市| 修文县| 澄江县| 清河县| 常宁市| 连城县| 阳朔县| 陕西省| 康保县| 古浪县| 贡觉县| 龙川县| 赫章县| 社旗县| 来宾市| 衡东县| 青冈县| 嘉荫县| 曲阜市| 通渭县| 云浮市| 乌拉特后旗| 阿鲁科尔沁旗| 潍坊市| 马边|