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

C語言宏定義的擴(kuò)展定義講解

 更新時(shí)間:2022年12月27日 09:50:14   作者:編程遠(yuǎn)泊  
這篇文章主要介紹了C語言宏定義的擴(kuò)展,宏定義是C語言提供的三種預(yù)處理功能的其中一種,這三種預(yù)處理包括:宏定義、文件包含、條件編譯

1. 常量宏定義

使用c中的#define 來定義一個(gè)常量來表示一年有多少秒

#define SECONDS_PER_YEAR (606024*365)UL

求圓的周長:

#define D® (r + r) //使用D(5) * 3.14 -----> (5 + 5) * 3.14

2. 定義宏函數(shù)

在定義宏函數(shù)時(shí),最后一個(gè)表達(dá)式的結(jié)果就是宏函數(shù)的返回值

格式:

? #define 宏函數(shù)名(形參表) ({語句1;語句2;語句3…})

? 形參沒有數(shù)據(jù)類型,只有參數(shù)名

請寫一個(gè)“標(biāo)準(zhǔn)”的宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較大較小值
#include <stdio.h>
#define MIN(A,B)  ({A<B?A:B;})
//宏定義分成多行書寫,行尾必須加續(xù)行符 
#define MAX(A,B)  ({int ret;\
                        if(A<B)\
                            ret=B;\
                        else    \
                            ret=A;\
                        ret;})
int main(int argc, char const *argv[])
{
    int min=MIN(100,200);
    printf("min value=%d\n",min);
    int max=MAX(100,200);
    printf("max value=%d\n",max);
    return 0;
}

3. 宏定義和#號結(jié)合

#可以將宏的參數(shù)轉(zhuǎn)換為一個(gè)字符串

#include <stdio.h>
#define NAME "lisi"
#define NAME1(n)  n
#define NAME2(n)  #n
int main(int argc, char const *argv[])
{
	printf("%s\n",NAME);   //------>printf("%s\n","lisi");
	printf("%s\n",NAME1(lisi));   //------>printf("%s\n",lisi); //error
	printf("%s\n",NAME2(lisi));   //------>printf("%s\n","lisi"); //error
    return 0;
}

預(yù)處理之后的效果:

# 5 "test02.c"
int main(int argc, char const *argv[])
{
 printf("%s\n","lisi");
 printf("%s\n",lisi);
 printf("%s\n","lisi");
    return 0;
}

4. 宏定義和兩個(gè)#結(jié)合

兩個(gè)#可以實(shí)現(xiàn)字符串的拼接

// 將a和b代表的字符串拼接生成一個(gè)新的字符串
#define  type(a, b)     a##b

type(uint, _t)  ----> 預(yù)處理階段展開之后的結(jié)果 : uint_t

練習(xí):int型、short型、char型的數(shù)據(jù)比較大小

#include <stdio.h>
#if 0
int max_int(int a,int b){
    return a>b?a:b;
}
short max_int(short a,short b){
    return a>b?a:b;
}
char max_int(char a,char b){
    return a>b?a:b;
}
#endif
//使用宏定義完成函數(shù)模板
#define MAX(T) T max_##T (T a,T b){return a>b?a:b;}
//使用宏定義,定義max_int max_short max_char函數(shù)
MAX(int)
MAX(short)
MAX(char)
#define max_value(T) max_##T
int main(int argc, char const *argv[])
{
    // printf("int max value =%d \n",max_int(10000,300000));
    // printf("short max value =%d \n",max_short(100,300));
    // printf("char max value =%c \n",max_char('a','b'));
    printf("int max value =%d \n",max_value(int)(10000,300000));
    printf("short max value =%d \n",max_value(short)(100,300));
    printf("char max value =%c \n",max_value(char)('a','b'));
    return 0;
}

預(yù)處理代碼:

int max_int (int a,int b){return a>b?a:b;}
short max_short (short a,short b){return a>b?a:b;}
char max_char (char a,char b){return a>b?a:b;}
int main(int argc, char const *argv[])
{
    printf("int max value =%d \n",max_int(10000,300000));
    printf("short max value =%d \n",max_short(100,300));
    printf("char max value =%c \n",max_char('a','b'));
    return 0;
}

5. 宏定義和do…while()的結(jié)合

使用場合:如果在宏定義階段,有多條語句,最后將c語句用do…while()包裹起來

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PRINT() printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);\
              printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);
#define DBUG() do{printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);\
              printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);}while(0)
int main(int argc, const char *argv[])
{
    int a=100,b=200;
#if 0
    /*
        調(diào)試宏:
        __FILE__:文件名
        __func__:函數(shù)名
        __LINE__:當(dāng)前行號
    */
    // if(a>b){
    //     printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);
    //     printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);
    // }else{
    //     printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);
    //     printf("%s:%s:%d\n",__FILE__,__func__,__LINE__);
    // }
    if(a>b){
        PRINT()
    }else{
        PRINT()
    }
#endif
#if 0
    //如果if或者else只有一條語句,可以省略{}
    //包括while,for循環(huán)語句都一樣
    if(a>b)
        PRINT()
    else
        PRINT()
    // if和else宏替換后,變成兩句,替換后語法錯(cuò)誤,解決辦法就是使用宏定義和do....while結(jié)合
#endif
    // if和else宏替換后,變成兩句,替換后語法錯(cuò)誤,解決辦法就是使用宏定義和do....while結(jié)合
    if(a>b)
        DBUG();
    else
        DBUG();
    return 0;
}

6. #ifdef…#else…#endif

格式:

#define 宏定義的名字

#ifdef 宏定義的名字

? //如果宏定義被定義了,這段代碼有效

#else

? //如果宏定義沒被定義,這段代碼有效

#endif

7. #ifndef…#else…#endif

格式:

#define 宏定義的名字

#ifndef 宏定義的名字

? //如果宏定義沒被定義了,這段代碼有效

#else

? //如果宏定義被定義,這段代碼有效

#endif

8. #if defined() … #else … #endif

----> 底層代碼使用較多

格式:
#if defined(宏定義的名字)
	// 如果宏定義被定義了,則這段代碼有效
#else
	// 如果宏定義沒有被定義,則這段代碼有效
#endif 
#if !defined(宏定義的名字)
	// 如果宏定義沒有被定義,則這段代碼有效
#else
	// 如果宏定義被定義了,則這段代碼有效
#endif 
// #if defined可以進(jìn)行邏輯運(yùn)算
#if defined(宏定義的名字1) || defined(宏定義的名字2)
	// 以上兩個(gè)宏定義只要有一個(gè)定義了,則這段代碼有效
#else
	// 以上兩個(gè)宏定義都沒有定義,則這段代碼有效
#endif 
#if defined(宏定義的名字1) && defined(宏定義的名字2)
	// 以上兩個(gè)宏定義都被定義了,則這段代碼有效
#else
	// 以上兩個(gè)宏定義只要有一個(gè)沒有定義,則這段代碼有效
#endif 

到此這篇關(guān)于C語言宏定義的擴(kuò)展定義講解的文章就介紹到這了,更多相關(guān)C語言宏定義內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列

    C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列

    這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C語言二維數(shù)組應(yīng)用之井字棋游戲

    C語言二維數(shù)組應(yīng)用之井字棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言二維數(shù)組應(yīng)用之井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++類繼承時(shí)的構(gòu)造函數(shù)

    C++類繼承時(shí)的構(gòu)造函數(shù)

    這篇文章主要介紹了C++類繼承時(shí)的構(gòu)造函數(shù),C++中,子類繼承父類除去構(gòu)造函數(shù)和析構(gòu)函數(shù)以外的所有成員。因此,子類需要編寫自己的構(gòu)造函數(shù)和析構(gòu)函數(shù)。更多相關(guān)詳情需要的小伙伴可以參考下面文章介紹
    2022-03-03
  • C++可以函數(shù)重載而C不可以的原因分析

    C++可以函數(shù)重載而C不可以的原因分析

    函數(shù)重載是指在同一個(gè)作用域內(nèi),可以定義多個(gè)函數(shù),它們具有相同的名稱但是參數(shù)列表不同,為什么C++可以函數(shù)重載而C不可以,接下來就有小編來給大家介紹一下C++可以函數(shù)重載而C不可以的原因,需要的朋友可以參考下
    2023-12-12
  • Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    這篇文章主要介紹了Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序,文中給出了實(shí)現(xiàn)的幾個(gè)關(guān)鍵代碼片段,剩下的只要套上main和線程調(diào)用的相關(guān)函數(shù)即可,非常詳細(xì),需要的朋友可以參考下
    2016-02-02
  • C++ 虛函數(shù)的詳解及簡單實(shí)例

    C++ 虛函數(shù)的詳解及簡單實(shí)例

    這篇文章主要介紹了C++ 虛函數(shù)的詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Qt打印信息輸出到日志文件中的兩種方法

    Qt打印信息輸出到日志文件中的兩種方法

    最近在研究把?Qt?的打印信息?輸出的到日志文件中,文件存儲嘗試了2種方法,并通過代碼示例和圖文給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • C語言中的浮點(diǎn)數(shù)存儲詳解

    C語言中的浮點(diǎn)數(shù)存儲詳解

    這篇文章主要介紹了C語言中的浮點(diǎn)數(shù)存儲詳解,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C語言猜兇手及類似題目的實(shí)現(xiàn)示例

    C語言猜兇手及類似題目的實(shí)現(xiàn)示例

    本文主要介紹了C語言猜兇手及類似題目的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++使用map容器實(shí)現(xiàn)電子詞典

    C++使用map容器實(shí)現(xiàn)電子詞典

    這篇文章主要為大家詳細(xì)介紹了C++如何使用map容器實(shí)現(xiàn)電子詞典功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2022-11-11

最新評論

新乐市| 兴山县| 香河县| 荣成市| 泗水县| 兰考县| 陆川县| 蚌埠市| 高密市| 会昌县| 应用必备| 绥德县| 江口县| 越西县| 方城县| 绥中县| 张家界市| 台北市| 茂名市| 改则县| 临泽县| 余干县| 会东县| 盈江县| 思茅市| 科技| 正定县| 交城县| 杨浦区| 唐河县| 东兰县| 娱乐| 长春市| 黄浦区| 于田县| 桃园县| 张家口市| 方正县| 孙吴县| 苍山县| 漳浦县|