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

一起來看看C語言的預處理注意點

 更新時間:2022年03月27日 15:19:33   作者:熠熠L  
這篇文章主要為大家詳細介紹了C語言的預處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

C 預處理器

C 預處理器不是編譯器的組成部分,但是它是編譯過程中一個單獨的步驟。簡言之,C 預處理器只不過是一個文本替換工具而已,它們會指示編譯器在實際編譯之前完成所需的預處理。

指令描述
#define定義宏
#include包含一個源代碼文件
#undef取消已定義的宏
#ifdef如果宏已經定義,則返回真
#ifndef如果宏沒有定義,則返回真
#if如果給定條件為真,則編譯下面代碼
#else#if的替代方案
#elif如果前面的 #if 給定條件不為真,當前條件為真,則編譯下面代碼
#endif結束一個 #if……#else 條件編譯塊
#error當遇到標準錯誤時,輸出錯誤消息
#pragma使用標準化方法,向編譯器發(fā)布特殊的命令到編譯器中

1.取消已定義宏

demo.h文件代碼如下

#ifndef     __DEMO_H_
#define    __DEMO_H_


#define PAI 3.14


#endif // __DEMO_H_
#include <stdio.h>
#include "demo.h"

/* 在 #include 與 main 函數(shù)中間區(qū)域使用#undef來取消以定義的宏,然后重新定義宏 */

#undef PAI
#define PAI 33.14


int main()
{
    printf("PAI = %G\n", PAI);
}

/*
輸出結果
PAI = 33.14
*/

2.使用#ifdef來調試

#ifdef DEBUG

/* 你的調試代碼 */

#endif // DEBUG

如果定義了 DEBUG,則執(zhí)行處理語句。在編譯時,如果您向 gcc 編譯器傳遞了 -DDEBUG 開關量,這個指令就非常有用。它定義了 DEBUG,您可以在編譯期間隨時開啟或關閉調試。

常用預定義宏

描述
__DATE__當前日期,一個以 “MMM DD YYYY” 格式表示的字符常量。
__TIME__當前時間,一個以 “HH:MM:SS” 格式表示的字符常量。
__FILE__這會包含當前文件名,一個字符串常量。
__LINE__這會包含當前行號,一個十進制常量。

預處理器運算符 

1.宏延續(xù)運算符

\一個宏通常寫在一個單行上。但是如果宏太長,一個單行容納不下,則使用宏延續(xù)運算符\

#include <stdio.h>


#define PAI  \
                3.1415926

int main()
{
    printf("%.8f\n", PAI);
}

2.字符串常量化運算符#

在宏定義中,當需要把一個宏的參數(shù)轉換為字符串常量時,則使用字符串常量化運算符#。在宏中使用的該運算符有一個特定的參數(shù)或參數(shù)列表。就是把宏的參數(shù)變成字符串。

#include <stdio.h>


#define PAI 3.1415926
//字符串常量化
#define CONVERT_TO_STR1(arg) "字符串常量化:" #arg
//字符串常量化
#define CONVERT_TO_STR2(arg) CONVERT_TO_STR1(arg)

int main()
{
    printf("%s\n", CONVERT_TO_STR1(ABC));
    printf("%s\n", CONVERT_TO_STR1(PAI));
    printf("%s\n", CONVERT_TO_STR2(PAI));
}

/*
輸出結果
字符串常量化:ABC
字符串常量化:PAI
字符串常量化:3.1415926
*/

這里有幾點需要提一下。

1.宏定義中,當有多個字符串需要連接時,以空格來隔開每一個字符串即可。

2.當需要把一個宏字符串常量化時,需要按照先定義一個宏函數(shù)1,然后再定義一個宏函數(shù)2,然后宏函數(shù)2調用宏函數(shù)1即可,例如CONVERT_TO_STR2調用CONVERT_TO_STR1

3.標記粘貼運算符##

宏定義內的標記粘貼運算符(##)會合并兩個參數(shù)。它允許在宏定義中兩個獨立的標記被合并為一個標記。

#include <stdio.h>


#define PRINTF1(arg) printf("var" #arg "  = %d\n" , var##arg)

int main()
{
    int var1 = 20;
    PRINTF1(1);
}


/*
輸出結果
var1  = 20
*/

參數(shù)化的宏

使用注意點

用宏定義時,含參數(shù)時,參數(shù)本身要加(),此外,對參數(shù)的操作整體也要加()。

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

使用宏函數(shù)的時候不要使用++/--運算符

#include <stdio.h>


#define MIN(A,B) ((A)<(B)?(A):(B))

int main()
{
    char *p="ghi";
    char a;
    a=MIN(*p++,'f');//不要使用自增/自減運算符
    printf("%c\n",a);
}


/*
輸出結果
f
*/

另,宏定義實現(xiàn)指定大小的交換:

#define SWAP(a, b, size)    \
    unsigned int __size = (size);    \
    char *__a = (a), *__b = (b);    \
    do    \
    {    \
        char __tmp = *__a;    \
        *__a++ = *__b;    \
        *__b++ = __tmp;    \
    } while (--__size > 0);

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容! 

相關文章

  • Qt項目實戰(zhàn)之方塊游戲的實現(xiàn)

    Qt項目實戰(zhàn)之方塊游戲的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)簡易的方塊游戲,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C++中volatile關鍵字的使用詳解以及常見的誤解

    C++中volatile關鍵字的使用詳解以及常見的誤解

    volatile 關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等
    2020-01-01
  • C語言深入探究選擇排序與基數(shù)排序使用案例講解

    C語言深入探究選擇排序與基數(shù)排序使用案例講解

    算法中排序是十分重要的,而每一個學習計算機的都會在初期的時候接觸到這種排序,下面這篇文章主要給大家介紹了關于c語言選擇排序與基數(shù)排序使用的相關資料,需要的朋友可以參考下
    2022-05-05
  • C++實現(xiàn)LeetCode(312.打氣球游戲)

    C++實現(xiàn)LeetCode(312.打氣球游戲)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(312.打氣球游戲),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具

    基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具

    這篇文章主要為大家詳細介紹了如何使用Qt軟件開發(fā)K線股P相關軟件,先開發(fā)一個通過CTP量化交易的sdk獲取相關推送數(shù)據(jù)的工具,需要的可以參考下
    2024-04-04
  • C語言基礎野指針與空指針示例分析

    C語言基礎野指針與空指針示例分析

    全網最接地氣的C語言野指針介紹,此處對于野指針與空指針知識點做一些簡要的介紹,作者實屬初學,難免文章中有內容理解不到位或者有不當之處,還請朋友們不吝指正,希望大家多多給予支持
    2021-11-11
  • 基于Matlab實現(xiàn)抖音小游戲蘋果蛇

    基于Matlab實現(xiàn)抖音小游戲蘋果蛇

    最近抖音上蘋果蛇小游戲大火,為了證明MATLAB無所不能,咋能不跟風做一個?文中詳細講解了游戲的實現(xiàn)步驟,感興趣的小伙伴可以嘗試一下
    2022-06-06
  • C語言文字藝術之數(shù)據(jù)輸入輸出

    C語言文字藝術之數(shù)據(jù)輸入輸出

    這篇文章主要介紹了C語言文字藝術之數(shù)據(jù)輸入輸出,C語言的語句用來向計算機系統(tǒng)發(fā)出操作指令。一條語句編寫完成經過編譯后產生若干條機器指
    2022-07-07
  • Qt實現(xiàn)簡易毛玻璃效果的示例代碼

    Qt實現(xiàn)簡易毛玻璃效果的示例代碼

    這篇文章主要介紹了Qt如何利用模糊功能實現(xiàn)簡易的毛玻璃效果,并且鼠標可以移動無邊框窗口,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-06-06
  • 使用C++創(chuàng)建多個IPC機制的上層接口

    使用C++創(chuàng)建多個IPC機制的上層接口

    設計一個上層的IPC接口,這個接口將在未來封裝底層的通信機制,這樣的設計要求接口足夠抽象,以便于底層實現(xiàn)的細節(jié)對上層用戶透明,本文給大家介紹了如何使用C++創(chuàng)建多個IPC機制的上層接口,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

武夷山市| 武功县| 墨玉县| 依安县| 小金县| 剑川县| 巨野县| 黄骅市| 河津市| 湟源县| 泸定县| 平陆县| 界首市| 兴宁市| 葵青区| 镇雄县| 龙州县| 方正县| 吉安县| 安达市| 溧阳市| 宽甸| 渑池县| 肇庆市| 清远市| 柳河县| 宝鸡市| 武川县| 汉寿县| 天水市| 乐平市| 雷山县| 和林格尔县| 蓝田县| 建湖县| 长岛县| 余干县| 泾阳县| 左贡县| 柯坪县| 九龙县|