欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++預處理淺析使用形式

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

文件包含

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

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

值得注意的是,

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

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

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

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

宏定義

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

無參數(shù)的宏

#define 宏名 一段符號

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

樣例:#defineip114514

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

測試:

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

結果:

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

需要注意的是宏定義不作語法檢查,只有在編譯被宏展開后的源程序才會報錯。

測試1:

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

結果:

這里沒使用宏,宏沒被展開,宏沒做語法檢查而不報錯。

測試2:

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

結果:

宏被展開了,直接編譯報錯。

帶參宏定義

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

在宏定義中的參數(shù)稱為形式參數(shù),在宏調用中的參數(shù)稱為實際參數(shù)。

對帶參數(shù)的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。

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

注意:在這個宏中,x和y作為參數(shù)在表達式中,應被括號分隔開。也就是說當宏中有表達式時,其內部參數(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);//sum1=(a+b*b)
    int sum2 = a2(a + b, b);//sum2=((a+b)*b)
    printf("%d %d\n", sum1,sum2);
    return 0;
}

結果:

條件編譯

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

樣例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   //這里只是檢查宏有沒有定義,并不檢查值
	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;
}

結果:

樣例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   //這里只是檢查宏有沒有定義,并不檢查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	sum2 = sum1;
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
    return 0;
}

結果:

顯而易見的,宏有沒有定義直接影響了程序運行的結果。

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

__FILE__ 宏所在文件的源文件名

__FUNCTION__宏所在函數(shù)名

__LINE__宏所在行的行號

__DATE__ 代碼編譯的日期

__TIME__ 代碼編譯的時間

樣例:

#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   //這里只是檢查宏有沒有定義,并不檢查值
	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("行  號:%d\n", __LINE__);  // 
	printf("日  期:%s\n", __DATE__);  // 
	printf("時  間:%s\n", __TIME__);  // 
	return 0;
}

結果:

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

相關文章

  • C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 隨機加密程序的實現(xiàn)方法

    隨機加密程序的實現(xiàn)方法

    下面實例是對隨機加密程序的實現(xiàn)方法。需要的朋友參考下
    2013-05-05
  • Linux中利用c語言刪除某個目錄下的文件

    Linux中利用c語言刪除某個目錄下的文件

    這篇文章主要給大家介紹了Linux中利用c語言刪除某個目錄下文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C語言解決字符串中插入和刪除某段字符串問題

    C語言解決字符串中插入和刪除某段字符串問題

    這篇文章主要介紹了C語言解決字符串中插入和刪除某段字符串問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 劍指offer之C++語言實現(xiàn)鏈表(兩種刪除節(jié)點方式)

    劍指offer之C++語言實現(xiàn)鏈表(兩種刪除節(jié)點方式)

    今天小編就為大家分享一篇關于劍指offer之C++語言實現(xiàn)鏈表(兩種刪除節(jié)點方式),小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言中字符的輸入輸出以及計算字符個數(shù)的方法詳解

    C語言中字符的輸入輸出以及計算字符個數(shù)的方法詳解

    這篇文章主要介紹了C語言中字符的輸入輸出以及計算字符個數(shù)的方法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • C語言類的基本語法詳解

    C語言類的基本語法詳解

    大家好,本篇文章主要講的是C語言類的基本語法詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 貪吃蛇C語言代碼實現(xiàn)(難度可選)

    貪吃蛇C語言代碼實現(xiàn)(難度可選)

    這篇文章主要為大家詳細介紹了貪吃蛇C語言代碼實現(xiàn),游戲難度可供選擇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 關于C語言位運算的簡單示例

    關于C語言位運算的簡單示例

    這篇文章主要介紹了關于C語言位運算的簡單示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Matlab實現(xiàn)繪制玫瑰線的示例代碼

    Matlab實現(xiàn)繪制玫瑰線的示例代碼

    這篇文章主要為大家介紹了如何利用Matlab繪制3好看的玫瑰線,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,感興趣的小伙伴可以動手試一試
    2022-08-08

最新評論