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

C/C++預(yù)處理淺析使用形式

 更新時(shí)間:2022年09月09日 10:03:42   作者:AKA.瞳源治  
預(yù)處理是指在進(jìn)行編譯的詞法掃描和語(yǔ)法分析之前所作的工作。預(yù)處理指令指示在程序正式編譯前就由編譯器進(jìn)行的操作,可放在程序中任何位置。處理完畢自動(dòng)進(jìn)入對(duì)源程序的編譯。C/C++中的預(yù)處理主要包含三種:文件包含、宏定義、條件編譯

文件包含

文件包含命令行的一般形式為:

#include"文件名" 或 #include<文件名>

值得注意的是,

(1)<>表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時(shí)設(shè)置的include目錄),而不在當(dāng)前源文件目錄去查找;

(2) ""則表示首先在當(dāng)前源文件目錄中查找,若未找到才到包含目錄中去查找。

(3)一個(gè)include命令只能指定一個(gè)被包含文件,若有多個(gè)文件要包含,則需用多個(gè)include命令。

(4)一個(gè)包含文件中可以包含別的包含文件。

宏定義

C語(yǔ)言程序中廣泛的使用宏定義,采用關(guān)鍵字define進(jìn)行定義,宏只是一種簡(jiǎn)單的字符串替換,根據(jù)是否帶參數(shù)分為無(wú)參和帶參。

無(wú)參數(shù)的宏

#define 宏名 一段符號(hào)

其中一段符號(hào)表示你需要的用宏名來(lái)代替的一段符號(hào),在編譯預(yù)處理時(shí),程序中出現(xiàn)的所有你設(shè)定的宏名都將被這段符號(hào)代替。

樣例:#defineip114514

表示程序中出現(xiàn)的所有ip都將表示114514。

測(cè)試:

#include <stdio.h>
#define	ip  114514
int main()
{
	int a = ip;
    printf("%d\n",a);
    return 0;
}

結(jié)果:

一般我們使用宏定義是為了方便修改和管理代碼。

需要注意的是宏定義不作語(yǔ)法檢查,只有在編譯被宏展開(kāi)后的源程序才會(huì)報(bào)錯(cuò)。

測(cè)試1:

#include <stdio.h>
#define	ip  1+2 = 3
int main()
{
    int a = 0;
    printf("%d\n", a);
    return 0;
}

結(jié)果:

這里沒(méi)使用宏,宏沒(méi)被展開(kāi),宏沒(méi)做語(yǔ)法檢查而不報(bào)錯(cuò)。

測(cè)試2:

#include <stdio.h>
#define	ip  1+2 = 3
int main()
{
    int a = ip;
    printf("%d\n", a);
    return 0;
}

結(jié)果:

宏被展開(kāi)了,直接編譯報(bào)錯(cuò)。

帶參宏定義

#define 宏名(形參表) 字符串

在宏定義中的參數(shù)稱(chēng)為形式參數(shù),在宏調(diào)用中的參數(shù)稱(chēng)為實(shí)際參數(shù)。

對(duì)帶參數(shù)的宏,在調(diào)用中,不僅要宏展開(kāi),而且要用實(shí)參去代換形參。

樣例:#define MULTIPLY_2(x,y) ((x)*(y))

注意:在這個(gè)宏中,x和y作為參數(shù)在表達(dá)式中,應(yīng)被括號(hào)分隔開(kāi)。也就是說(shuō)當(dāng)宏中有表達(dá)式時(shí),其內(nèi)部參數(shù)需被括號(hào)獨(dú)立,防止程序出錯(cuò)。

樣例:

#include <stdio.h>
#define	a1(x,y) (x*y)
#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);//sum1=(a+b*b)
    int sum2 = a2(a + b, b);//sum2=((a+b)*b)
    printf("%d %d\n", sum1,sum2);
    return 0;
}

結(jié)果:

條件編譯

一般情況下,源程序中所有的行都參加編譯。但有時(shí)希望對(duì)其中一部分內(nèi)容只在滿足一定條件才進(jìn)行編譯,也就是對(duì)一部分內(nèi)容指定編譯的條件,這就是條件編譯。

樣例1:

#include <stdio.h>
#define	a1(x,y) (x*y)
#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //這里只是檢查宏有沒(méi)有定義,并不檢查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	if (a == 2)
	{
		int sum2 = a2(a + b, b);
	}
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
    return 0;
}

結(jié)果:

樣例2:

#include <stdio.h>
#define	a1(x,y) (x*y)
//#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //這里只是檢查宏有沒(méi)有定義,并不檢查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	sum2 = sum1;
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
    return 0;
}

結(jié)果:

顯而易見(jiàn)的,宏有沒(méi)有定義直接影響了程序運(yùn)行的結(jié)果。

ps:c編譯器中,有幾個(gè)特殊形式的預(yù)定義宏需要我們注意。

__FILE__ 宏所在文件的源文件名

__FUNCTION__宏所在函數(shù)名

__LINE__宏所在行的行號(hào)

__DATE__ 代碼編譯的日期

__TIME__ 代碼編譯的時(shí)間

樣例:

#include <stdio.h>
#define	a1(x,y) (x*y)
//#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //這里只是檢查宏有沒(méi)有定義,并不檢查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	sum2 = sum1;
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
	printf("文件名:%s\n", __FILE__);
	printf("函數(shù)名:%s\n", __FUNCTION__);
	printf("行  號(hào):%d\n", __LINE__);  // 
	printf("日  期:%s\n", __DATE__);  // 
	printf("時(shí)  間:%s\n", __TIME__);  // 
	return 0;
}

結(jié)果:

到此這篇關(guān)于C/C++預(yù)處理淺析使用形式的文章就介紹到這了,更多相關(guān)C++預(yù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)音樂(lè)播放器的示例代碼

    C語(yǔ)言實(shí)現(xiàn)音樂(lè)播放器的示例代碼

    這篇文章主要和大家分享了一個(gè)C語(yǔ)言的小DEMO,可以實(shí)現(xiàn)音樂(lè)播放器功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-02-02
  • 詳解c++優(yōu)先隊(duì)列priority_queue的用法

    詳解c++優(yōu)先隊(duì)列priority_queue的用法

    本文詳細(xì)講解了c++優(yōu)先隊(duì)列priority_queue的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言 數(shù)組指針詳解及示例代碼

    C語(yǔ)言 數(shù)組指針詳解及示例代碼

    本文主要介紹C語(yǔ)言 數(shù)組指針,這里整理了相關(guān)資料并附示例待會(huì)及實(shí)現(xiàn)結(jié)果,幫助大家學(xué)習(xí)C語(yǔ)言中指針的知識(shí),有需要學(xué)習(xí)此部分內(nèi)容的朋友可以參考下
    2016-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++ 函數(shù)指針的實(shí)現(xiàn)

    C++ 函數(shù)指針的實(shí)現(xiàn)

    本文主要介紹了C++ 函數(shù)指針的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 詳解C++的String類(lèi)的字符串分割實(shí)現(xiàn)

    詳解C++的String類(lèi)的字符串分割實(shí)現(xiàn)

    這篇文章主要介紹了詳解C++的String類(lèi)的字符串分割實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Windows安裝配置C/C++(VS2017)OpenSSL開(kāi)發(fā)環(huán)境配置教程

    Windows安裝配置C/C++(VS2017)OpenSSL開(kāi)發(fā)環(huán)境配置教程

    這篇文章主要為大家詳細(xì)介紹了Windows安裝配置C/C++,OpenSSL開(kāi)發(fā)環(huán)境配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C語(yǔ)言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換函數(shù)的實(shí)例詳解

    C語(yǔ)言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換函數(shù)的實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換函數(shù)的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例幫助大家實(shí)現(xiàn)改功能,需要的朋友可以參考下
    2017-08-08
  • C語(yǔ)言實(shí)現(xiàn)通訊管理系統(tǒng)設(shè)計(jì)

    C語(yǔ)言實(shí)現(xiàn)通訊管理系統(tǒng)設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊管理系統(tǒng)設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機(jī)制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數(shù)據(jù)傳遞(異步操作)。Promise和Future提供了訪問(wèn)異步操作結(jié)果的機(jī)制,可以在線程之間傳遞數(shù)據(jù)和異常消息。本文就來(lái)聊聊二者的使用,希望對(duì)大家有所幫助
    2022-11-11

最新評(píng)論

峨眉山市| 颍上县| 墨脱县| 年辖:市辖区| 潮州市| 永仁县| 三江| 日照市| 福海县| 科技| 苏尼特左旗| 德化县| 蚌埠市| 临颍县| 阆中市| 罗甸县| 广州市| 新巴尔虎左旗| 沙雅县| 文登市| 额尔古纳市| 保靖县| 合山市| 巫溪县| 金塔县| 仙居县| 常熟市| 平度市| 称多县| 勃利县| 靖州| 定结县| 罗城| 海口市| 大理市| 桐柏县| 渝中区| 井冈山市| 连云港市| 曲水县| 临猗县|