亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

你必須知道的C語言預(yù)處理的問題詳解

2020-01-26 16:18:06
字體:
供稿:網(wǎng)友

  C語言預(yù)處理器執(zhí)行宏替換、條件編譯和文件包含。通常采用以“#”為行首的提示。下面是C語言預(yù)處理的應(yīng)用場合:

  1.三字母詞(Trigraph Sequences)

  C源程序的字符集被包含在7位的ASCII字符集中,但是它是ISO 646-1983 Invariant Code Set的超集。為了讓程序可以在縮減集(reduced set)中呈現(xiàn)出來,下面的三字母詞會被替換成相應(yīng)的單字符.

三字母詞單字符
??=#
??//
??'^
??([
??)]
??!|
??<{
??>}
??-~

  替換發(fā)生在任何其他處理之前。

  例如:如果你嘗試打印字符串"what??!"  

復(fù)制代碼 代碼如下:

 printf("what??!/n");

  會得到字符串"what|"。

  如果你這樣注釋代碼,結(jié)果會讓你意外:  

復(fù)制代碼 代碼如下:

// Will the next line be executed?????????????/
a++;

  a++并不會執(zhí)行。前提是你知道/的作用。

  注意:由于編譯器對ANSI C的支持不一樣,有些編譯器會把三字母詞當(dāng)普通字符處理,你需要給編譯選項加上“-trigraphs”

  2.行拼接

  以反斜杠"/"結(jié)尾的行會把該行和下一行拼接成一行(預(yù)處理器做的工作就是把該反斜杠'"/"和接著的換行字符'/n'刪除)。['/'稱為續(xù)行符]

  例如你可以這樣寫

復(fù)制代碼 代碼如下:

//
* is a legal comment. */
/

  3.宏定義和展開

  a)簡單宏替換

  簡單宏替換使程序中能用一個標(biāo)識符來表示一個單詞串,指令形式為:

復(fù)制代碼 代碼如下:

#define 標(biāo)識符 單詞串

  標(biāo)識符(稱為宏名)被定義為后面的單詞串;單詞串(簡稱串)是任意以換行結(jié)束的用于替換程序中該標(biāo)識符的正文。如果串太長需要寫成多行,則除了最后一行外每一行末尾都要有一個續(xù)行符(即添加一個“/”后回車)。

  注意:字符串常數(shù)中出現(xiàn)的與宏名相同的字符串不在替換之列。例如:

復(fù)制代碼 代碼如下:

#define YES 1
printf("YES");            // 輸出 YES,而不是1

  b)帶參數(shù)的宏替換

  預(yù)處理指令的形式為:

復(fù)制代碼 代碼如下:

#define    標(biāo)識符(標(biāo)識符,標(biāo)識符,...,標(biāo)識符)    單詞串

  “標(biāo)識符(標(biāo)識符,標(biāo)識符,...,標(biāo)識符)”是被定義的宏,()外面的標(biāo)識符稱為宏名,()中的標(biāo)識符是宏的形式參數(shù);宏名與其后的()之間不能有空白符。

  例如:  

復(fù)制代碼 代碼如下:

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

  ♦操作符#和##

    操作符#把其后的串變成雙引號包圍的串;

    操作符##把兩個標(biāo)志符拼在一起,形成一個新的標(biāo)識符

復(fù)制代碼 代碼如下:

#define str(expr)    #expr
#define cat(x,y)      x ## y

int ab=12;
printf(str(hello world!));      // 會被替換成 printf("hello world!");
printf("ab=%d/n", cat(a,b));        // 會被替換成 printf("ab=%d/n", ab);  輸出 ab=12


  ♦宏替換時的順序  
復(fù)制代碼 代碼如下:

#include <stdio.h>
 #define f(a,b)  a##b
 #define g(a)   #a
 #define h(a)   g(a)

 int main()
 {
         printf("%s/n", h(f(1,2)));
         printf("%s/n", g(f(1,2)));
         return 0;
 }

  輸出結(jié)果是12和f(1,2)。為什么會這樣呢,宏的解開不像函數(shù),由里到外。

  (1)在""內(nèi)的宏名或宏參數(shù)名不被替換

  (2)宏替換順序:一個帶參數(shù)的宏內(nèi)部調(diào)用另一個宏,參數(shù)也是一個宏,則先替換外層的宏,再替換外層宏的參數(shù),最后替換內(nèi)層宏。

  知道這些規(guī)則對于出現(xiàn)上面的結(jié)果就不難理解了。

  溫馨提示:在寫帶參數(shù)的宏替換指令時,推薦的做法時將單詞串中的每一個參數(shù)都用()括起來,整個表達(dá)式也要用()括起來;否則,替換結(jié)果可能不是你想要的,例如:

復(fù)制代碼 代碼如下:

#define sqr(x)    x * x
// 如果程序中的宏的引用形式為
sqr(3.0+1.0);                // 經(jīng)預(yù)處理后會被替換為 3.0 + 1.0 * 3.0 + 1.0

  結(jié)果與你的原意(3.0+1.0)*(3.0+1.0)不等價

  c)取消宏定義

復(fù)制代碼 代碼如下:

#undef 標(biāo)識符

  會使宏名標(biāo)識符失去定義。如果#undef 一個沒有定義過的標(biāo)識符  也不會引發(fā)錯誤。

  4.文件包含  

復(fù)制代碼 代碼如下:

#include <filename>     // 引用標(biāo)準(zhǔn)庫的頭文件(編譯器將從標(biāo)準(zhǔn)庫目錄開始搜索)
#include "filename"       // 引用非標(biāo)準(zhǔn)庫的頭文件(編譯器將從用戶的工作目錄開始搜索)
#include 標(biāo)識符            // 標(biāo)識符是由#define 定義的<filename>或"filename"的宏名

  5.條件編譯

  條件編譯指令格式如下:

復(fù)制代碼 代碼如下:

if-line 正文
[#elif 常量表達(dá)式 正文]
...
[#else 正文]
#endif


  if-line為下面中的任意一種形式:

  (1)#if 常量表達(dá)式

 ?。?)#ifdef 標(biāo)識符

 ?。?)#ifndef 標(biāo)識符

  ♦defined操作符用來判斷標(biāo)識符是否定義過。形式如下:

  defined identifier

  defined (identifier)

  下面的

  #ifdef identifier

  #ifndef identifier

  等價于

  #if defined identifier

  #if ! defined identifier

  6.行控制

  行控制指令有下列兩種形式

  (1)#line n "filename"

 ?。?)#line n

  行控制預(yù)處理功能為其他產(chǎn)生C源程序的預(yù)處理程序(例如數(shù)據(jù)庫系統(tǒng)中的宿主C預(yù)編譯程序)在跟蹤被處理程序(例如被宿主C預(yù)編譯程序處理的擴(kuò)展名為.pc的預(yù)編譯源程序)的行號時提供方便,便于最終用戶的源程序查錯和該錯。它會使編譯器相信n(十進(jìn)制正整數(shù))為下一個源程序行的行號,“filename”會被當(dāng)作當(dāng)前文件名。

  7.生成錯誤

  #error error_messageopt

  讓編譯器輸出錯誤信息error_message

  8.Pragmas

  #pragma token-sequenceopt

  #pragma是編譯程序?qū)崿F(xiàn)時定義的指令,它允許由此向編譯程序傳入各種指令。例如,一個編譯程序可能具有支持跟蹤程序執(zhí)行的選項,此時可以用#pragma語句選擇該功能。編譯程序忽略其不支持的#pragma選項。#pragma提高C源程序?qū)幾g程序的可移植性。

  9.空指令

  形如

  #

  沒有任何作用

  10.預(yù)定義宏

  C語言規(guī)范了5個固有的預(yù)定義宏,他們分別是

  __LINE__  當(dāng)前源程序的行號

  __FILE__  正在編譯的程序的文件名

  __DATE__  編譯的日期字符串,形如"Mmm dd yyyy"

  __TIME__  編譯的時間字符串,形如"hh:mm:ss"

  __STDC__  如果__STDC__的內(nèi)容是十進(jìn)制常數(shù)1,則表示編譯程序的實現(xiàn)符合標(biāo)準(zhǔn)C

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

国产精品网红福利| 亚洲欧美中日韩| 国产精品尤物福利片在线观看| 欧美在线一级视频| wwwww亚洲| 亚洲精品成a人| 天堂中文资源在线观看| 久久久久久久久久一区二区| 中文字幕国产精品一区二区| 一级黄色免费在线观看| 国产成人在线免费观看| 伦理欧美一区| 久久免费视频在线观看| 免费亚洲电影| 91久久精品无嫩草影院| 午夜视频在线观| 日韩av中文字幕一区二区三区| 青青草激情视频| 欧美黑人巨大videos精品| 国产精品露脸自拍| wwwjizzjizzcom| 精品噜噜噜噜久久久久久久久试看| 亚洲综合在线免费| 波多野结衣av在线播放| 国产精品久久久久久久久免费丝袜| 亚洲精品一区二区三区在线| 欧美伊人久久久久久久久影院| 成人黄色免费网址| 狠狠做深爱婷婷综合一区| 一级女性全黄久久生活片免费| 美脚恋feet久草欧美| 风流少妇一区二区三区91| 农村一级毛片| 欧美日韩dvd| 亚洲午夜精品在线| 色94色欧美一区| 9l视频自拍9l视频自拍| 内衣办公室在线| 希岛爱理一区二区三区av高清| 性刺激的欧美三级视频| 国产一区二区三区高清播放| 久久久久久久久久网| 91超薄肉色丝袜交足高跟凉鞋| 91成人精品视频| 国产999精品久久久久久绿帽| 一本色道久久综合亚洲精品按摩| 亚洲女成人图区| 国产精品久久久久久久电影| 懂色av一区| 亚洲一级淫片| 中文字幕在线中文字幕二区| 亚洲 美腿 欧美 偷拍| 国产三级免费观看| 国产午夜精品久久久久久免费视| 成人免费看片98欧美| 欧美日韩在线播放一区| 国产精品麻豆久久| 扒开jk护士狂揉免费| 久久久久久久久99| 男人猛进猛出女人屁股视频| 国产精品成人午夜| 中文字幕av播放| 呦视频在线一区二区三区| 美国av免费观看| 99热这里只有精品4| 欧美有码在线观看| 99久久99九九99九九九| 午夜久久久久久久| 日韩网站中文字幕| 99久久99热久久精品免费看| 91.com在线观看| 三上悠亚在线观看二区| 精品99在线视频| av岛国在线| 免费在线黄网站| 午夜天堂精品久久久久| av电影天堂一区二区在线观看| 妓院一钑片免看黄大片| 伊人色综合久久久天天蜜桃| 九九热视频这里只有精品| jizz中国女人| 777sesese| 久久精品99国产精品酒店日本| 国产69精品久久久久孕妇| 欧美一级淫片播放口| 日本少妇激情舌吻| 日本一区二区久久精品| 日本一区二区三区久久| 国产精品1luya在线播放| 婷婷丁香激情五月| 亚洲中午字幕| 久久国产精品99久久人人澡| 国产富婆一级全黄大片| 三级黄在线播放| 116美女写真午夜一级久久| 欧美1819sex性处18免费| 日本欧美一区二区在线观看| 国内精品久久久久久久影视蜜臀| 亚洲图片欧美日产| 国产成人精品久久亚洲高清不卡| 精品一区二区三区在线播放视频| 日韩国产激情在线| 国产一级爱c视频| 久久福利小视频| 福利视频第一区| 9l视频白拍9色9l视频| 成人精品电影在线| 97精品国产97久久久久久粉红| www.av在线视频| 国产欧美一区二区三区在线观看视频| 国产91热爆ts人妖在线| 超碰影院在线观看| 色综合久久影院| 欧美日本一区二区三区| 久久久久高清精品| 91免费看片在线| 激情五月少妇a| 亚洲第一成年免费网站| 久久免费观看视频| 国产精品一区二区三区成人| a中文在线播放| 国产成人在线免费看| 欧美丰满少妇人妻精品| 亚洲色成人一区二区三区小说| 偷拍一区二区| 欧美在线观看不卡| 亚洲一卡二卡三卡四卡五卡| 国产精品一区二区av影院萌芽| jizz在亚洲| 欧美一级在线| 亚洲夜间福利| 欧美性猛交bbbbb精品| 一区二区三区在线免费观看视频| 青青艹在线视频| 一区二区成人| 国产精品久久久一区二区| 国产ts变态重口人妖hd| 国产成人精品一区二区在线| 91麻豆精品成人一区二区| 国产精品无码白浆高潮| 在线免费一级片| 日韩欧美中文字幕一区二区三区| 女女互磨互喷水高潮les呻吟| 精品国产乱码久久久久久虫虫漫画| 亚洲午夜精品久久久久久浪潮| 欧美jizz18| 欧美日韩国产成人精品| 一区二区三区亚洲变态调教大结局| 在线免费观看你懂的| 中文字幕亚洲乱码熟女1区2区| 国产精品欧美一区喷水| 黑人性受xxxx黑人xyx性爽| 中国黄色a级片| 欧美无乱码久久久免费午夜一区| 日本激情一区二区三区| 三级外国片在线观看视频| 免费黄色网页在线观看| 亚洲精品视频自拍| 四季av一区二区三区| 国产精品偷伦视频免费观看了| 中文字幕人妻一区二区三区| 天天色综合4| 在线免费观看中文字幕| www.欧美三级电影.com| 欧美性视频网站| 中文字幕第28页| 欧美国产精品va在线观看| 久久午夜精品一区二区| 免费大片黄在线| 色七七在线观看| 久久久综合久久| 外国成人在线视频| 日韩av手机在线观看| 在线观看视频你懂的| 五月天婷婷在线观看| 日韩电影在线观看网站| 成人在线视频首页| 日韩欧美色视频| 精品久久人人做人人爰| 91色琪琪电影亚洲精品久久| 免费男女羞羞的视频网站中文字幕妖精视频| 宅男66日本亚洲欧美视频| 亚洲高清视频在线观看| 亚洲制服欧美中文字幕中文字幕| 亚洲一区 二区| 最近中文字幕av免费高清| 日韩成人久久| 亚洲国产精品中文| 久久久久久久免费| 欧美视频在线观看| 日韩高清成人| 欧美新色视频| 亚洲缚视频在线观看| 日本一区二区三区四区在线视频| 激情久久久久久久久久久久久久久久| 亚洲第一精品电影| 日韩高清av| 黄色小视频在线免费看| 日韩成人免费看| 国产乱子伦农村叉叉叉| 91a在线视频| 欧美亚洲国产怡红院影院| 亚洲一区二区三区中文字幕| 超碰在线免费观看97| 久久亚洲欧美日韩精品专区| 成码无人av片在线观看网站| 黄色免费视频大全| 中文字幕欧美激情极品| 精品综合免费视频观看| 国产精品69久久久| 天天操天天爱天天干| 7777精品久久久大香线蕉小说| 午夜国产精品理论片久久影院| 富二代精品短视频| 少妇与大狼拘作爱性a| 精品爽片免费看久久| 蜜臀av在线播放一区二区三区| 最近中文字幕mv免费高清视频8| 精品无人区麻豆乱码久久久| 91在线播放国产| 色综合久久综合网欧美综合网| 婷婷亚洲五月色综合| 在线观看的黄色| 亚洲天堂av在线免费观看| 日韩色视频在线观看| 亚洲另类图片另类电影| 做a视频在线观看| 美女日韩一区| 精品人伦一区二区三区蜜桃免费| 91麻豆精品久久久久蜜臀| 日韩一级片网址| 懂色av懂色av粉嫩av| 亚洲日本va中文字幕久久| 91麻豆精品秘密| 欧美日韩激情在线一区二区三区| 精品精品国产三级a∨在线| 国产mv免费观看入口亚洲| 中文字幕在线观看一区二区| 美女久久久久久久久| 欧美人与禽猛交乱配| 天堂综合在线播放| 污污视频免费看| 日韩黄色片在线| 国产嫩草影院久久久久| 99re国产| 成人av毛片在线观看| 亚洲第一区第一页| 亚洲一区在线观看免费观看电影高清| 色婷婷激情视频| 先锋影音资源999| a美女胸又www黄视频久久| 国产三级视频在线看| 久久久久久亚洲精品| 精品视频一二三| 美女张开让男人捅| 成年人网站免费视频| 国产精品一区毛片| 自拍在线观看| 亚洲第一页在线视频| 国内精品福利视频| 国产日韩精品在线| 星空无限传媒在线| 先锋影音男人资源| 国产免费a∨片在线观看不卡| 日韩一区二区福利| 日韩在线观看你懂的| 1069男同网址| 黄色网址在线免费观看| 欧美国产精品人人做人人爱| 色哟哟中文字幕| 狠狠干夜夜爽| 一本一本久久a久久精品综合麻豆| 日韩中文字幕一区二区三区| 国产精品乱人伦中文| 久久无码专区国产精品s| 成人激情视频在线观看| 免费在线看黄色片| 做爰无遮挡三级| 亚洲国产一区二区三区在线播| 亚洲综合在线免费| 男人艹女人网站| 久久99热只有频精品91密拍| 欧美一级片在线视频| 精品国产综合久久| 中文字幕av高清在线观看| 国产在线免费观看| 第一福利永久视频精品| 日本二区三区视频| 日韩午夜免费| 亚洲国产天堂av| www.色亚洲| 国产精品一卡二卡三卡| 亚洲精品天堂在线| 欧美剧情电影在线观看完整版免费励志电影| 成人在线观看91| free性中国hd国语露脸| 美女被人操网站| 国产精品久久久久久av福利软件| 国产精品免费一区二区三区四区| 鲁丝一区鲁丝二区鲁丝三区| 91精品国产品国语在线不卡| 亚洲午夜精品久久久久久浪潮| 777精品伊人久久久久大香线蕉| 中文字幕免费在线看线人动作大片| 久久一区二区三区欧美亚洲| 日韩av手机在线免费观看| 欧美激情综合在线| 成人综合久久网| www中文在线| 欧美影院一区二区| 久久综合免费视频影院| 亚洲人成电影在线观看天堂色| 国产精品一区二区三区不卡| 日韩av免费观影| 国产一区二区三区免费视频| 国产一二三四区| 91国产免费视频| 搞黄视频在线观看| 精品麻豆国产| 国产日韩欧美精品一区| 日本不卡的三区四区五区| 国产成人无码av| 国产日韩亚洲欧美综合| 小处雏高清一区二区三区| 肉色超薄丝袜脚交| 欧美videos另类齐全| 中文字幕精品av| 国产精品一区二区免费在线观看|