0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言:條件編譯及預(yù)定義符號知識詳解

C語言編程學(xué)習(xí)基地 ? 來源:未知 ? 作者:李倩 ? 2018-03-31 09:20 ? 次閱讀

一.預(yù)定義符號

C標準定義了如下五個預(yù)處理符號

在文件輸入輸出以及輸出日志等場合下我們會用到這些預(yù)處理符號,比如

\+回車 : 續(xù)行符,轉(zhuǎn)義字符,后面不能加任何除回車之外的字符,否則會報錯

二.#define關(guān)鍵字

#define有兩個作用,一個是定義標識符,第二個是定義宏

1.定義標識符

不要在define定義的標識符里加分號

2.定義宏

#define機制包括一個規(guī)定,允許把參數(shù)替換到文本中,這種實現(xiàn)通常叫做宏或定義宏

宏定義永遠不要吝嗇括號,防止因為優(yōu)先級的問題導(dǎo)致出現(xiàn)不可思議的后果 宏不能實現(xiàn)遞歸 宏只文本替換,并不簡化計算 字符串中的內(nèi)容不會發(fā)生宏替換

3.#和 ##

編譯器會自動就兩個相鄰字符串自動連接成一個

#:把參數(shù)插入到字符串中

#a -> “a”

##可以把位于它兩邊的符號拼成一個符號

4.宏和函數(shù)對比

①宏沒有類型檢查

沒有類型檢查是宏的一大特點(但同時也是不安全的隱患),可以完成很多函數(shù)不可能做到的功能

②宏沒有函數(shù)的調(diào)用和返回等額外開銷,效率更高,

但是當(dāng)邏輯復(fù)雜并且代碼量巨大時,調(diào)用和返回的開銷和運算的時間相比微乎其微,可以省略

③宏單純只是文本替換,不能進行調(diào)試,很致命

④宏可能會使代碼長度增長

⑤函數(shù)的參數(shù)如果是一個表達式,會計算出表達式的結(jié)果傳入?yún)?shù)

宏的參數(shù)如果是一個表達式,只會文本替換,不會進行計算

總結(jié):各有千秋,小代碼量使用宏,大代碼量使用函數(shù),C++中擯棄宏這一概念,使用內(nèi)聯(lián),基于優(yōu)缺點,最好不要使用宏

5.帶有副作用的宏參數(shù)

不要給宏參數(shù)傳入帶有副作用的參數(shù)

6.命名約定

宏:全部大寫

函數(shù): 不全部大寫

例外

#undef name //取消宏標識符name的定義

三.條件編譯

1.如果定義了DEBUG,語句執(zhí)行,反之,不執(zhí)行

2.條件編譯

3.多分支條件編譯

3.判斷是否被定義

4.嵌套指令

預(yù)處理指令可以進行嵌套

四.其它

1.頭文件的包含

2.#error “…”

遇到#error便會產(chǎn)生一個編譯錯誤

3.strcpy();

源字符串必須以’/0’結(jié)束,返回目標字符串地址且這個函數(shù)不管目標空間是否放得下返回的目標字符串

4.assert(條件語句)

善用斷言,頭文件為

5.鏈式反應(yīng)

這次函數(shù)的返回值可以作為下一個函數(shù)的參數(shù),達到鏈式反應(yīng)的效果

printf(“%d\n”,strlen(strcpy(p,”hello world!”)));

6.常見錯誤:

編譯型錯誤

直接看編譯器錯誤提示信息即可 鏈接型錯誤

函數(shù)名,變量名寫錯,庫文件使用錯誤(第三方庫) 運行時錯誤

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135858
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49015

原文標題:C語言#define關(guān)鍵字,條件編譯及預(yù)定義符號知識詳解

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    幾款C語言編譯器推薦

    一些剛開始接觸C語言編譯的網(wǎng)友想下載一款C語言編譯器來使用,不過,網(wǎng)絡(luò)上有不少
    發(fā)表于 09-05 09:19 ?1w次閱讀

    C語言定義與枚舉類型知識

    定義的標識符不占內(nèi)存,只是一個臨時的符號,預(yù)編譯后這個符號就不存在了。在簡單的程序使用帶參數(shù)的宏定義可完成函數(shù)調(diào)用的功能,又能減少系統(tǒng)開銷,
    發(fā)表于 10-11 17:34 ?1542次閱讀

    C語言預(yù)定義宏的用法和使用場景

    C語言中,預(yù)定義宏是由編譯器提供的一組特殊標識符,可以在程序中直接使用,無需進行額外的定義。
    發(fā)表于 08-16 16:12 ?442次閱讀

    C語言條件編譯的妙用

    線。我對學(xué)習(xí)總結(jié)出一句話“壓力不是有人努力,而是比你牛X N倍的人依然在努力” C語言條件編譯的應(yīng)用 一般情況下,源程序中所有的行都要參加編譯
    發(fā)表于 07-19 01:53

    如何在C語言滿足多個條件下進行條件編譯?

    請教一下各位。在C語言中如果滿足多個宏定義條件怎么來進行條件編譯呢?今天在寫I2
    發(fā)表于 11-08 04:35

    【每日一知識點】C語言中const詳解

    的內(nèi)存地址,所以,const定義的只讀變量在程序運行過程中只有一份備份,它是全局的只讀變量,是存放在靜態(tài)區(qū)的。2、 修飾數(shù)組C語言中const還可以修飾數(shù)組,舉例如下:const int array
    發(fā)表于 03-29 10:53

    C語言的精髓——指針詳解

    C語言的精髓——指針詳解
    發(fā)表于 11-30 14:43 ?17次下載

    C語言程序設(shè)計教程之編譯預(yù)處理的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是C語言程序設(shè)計教程之編譯預(yù)處理的詳細資料說明主要內(nèi)容包括了:1.宏定義 2.文件包含 3.條件
    發(fā)表于 01-08 14:19 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設(shè)計教程之<b class='flag-5'>編譯</b>預(yù)處理的詳細資料說明

    C語言中#和##符號有什么樣的作用

    #endif定義的無用代碼過濾掉; 將代碼中沒用的注釋部分刪除等。 從而生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸
    的頭像 發(fā)表于 02-24 10:56 ?4.6w次閱讀

    c語言條件編譯技巧與示例分析

    C語言條件編譯#if, #elif, #else, #endif、#ifdef, #ifndef 有些程序在調(diào)試、兼容性、平臺移植等情況下可能想要通過簡單地設(shè)置一些參數(shù)就生成一個不同
    的頭像 發(fā)表于 08-26 15:06 ?2716次閱讀

    C語言條件編譯語句and單片機DMA的介紹

    C語言條件編譯語句and單片機DMA的介紹C語言條件
    發(fā)表于 11-29 10:36 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>條件</b><b class='flag-5'>編譯</b>語句and單片機DMA的介紹

    C語言關(guān)于變量定義未使用編譯警告warring

    C語言關(guān)于變量定義未使用編譯警告warring1.警告warring的產(chǎn)生1.1具體警告warring1.2解決方案1.2.1利用attribute 機制1.2.2利用void關(guān)鍵字2
    發(fā)表于 11-29 18:21 ?4次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>關(guān)于變量<b class='flag-5'>定義</b>未使用<b class='flag-5'>編譯</b>警告warring

    C語言條件編譯詳解

    —般情況下,C語言源程序中的每一行代碼.都要參加編譯。但有時候出于對程序代碼優(yōu)化的考慮,希望只對其中一部分內(nèi)容進行編譯。此時就需要在程序中加上條件
    的頭像 發(fā)表于 04-14 13:12 ?3035次閱讀

    關(guān)于C語言知識分享

    C語言是高級語言,由很多適合人閱讀的英文字母和符號組成。而CPU只認得O和1組成的指令(稱為“機器碼”)。所以,我們必須要把C
    發(fā)表于 08-26 17:20 ?2次下載

    c語言定義可以嵌套嗎?

    c語言定義可以嵌套嗎? C語言定義可以嵌套,也就是一個宏
    的頭像 發(fā)表于 09-04 17:38 ?3072次閱讀