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

首頁 > 編程 > C++ > 正文

簡介C/C++預處理器的一些工作

2020-05-23 14:18:42
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C/C++預處理器的一些工作,有助于理解編譯器底層的工作流程,需要的朋友可以參考下

多么令人愉快的一個問題啊

就在被帶到編譯器那里之前,預處理器都會對你的源代碼瞧上一瞧, 做一些格式化的工作,并執行任何你在源代碼里面留給它來執行的指令.

像什么?

好吧,預處理器的指令就被叫做預處理器指令,而他們都以一個#開頭.

像 #include 這樣?

正確.

每一個被預處理器遇到的 # 命令都會導致在某種方式上對源代碼的修改. 讓我們來簡單的研究研究它們,然后我們就會之后這背后都是怎么運轉的了.

#include

包含其他庫、類、接口等的頭文件。預處理器實際上就只是把整個頭文件復制到你的源代碼里面 (是的,這就是包含防御之所以是件好事的原因了).

#define

誰會不喜歡宏呢! 預處理器會把所有定義的實體替換成被定義的代碼. 定義會一直持續直到發現這個定義的 #undef 指令.

#ifdef

條件行為告訴預處理器包含在遇到聲明的條件成立的條件塊中的代碼. 你可以就像if-else語句一樣使用它們,從這里面選擇: #ifdef, #ifndef, #if, #else, 以及 #elif, 而你總是要使用一個 #endif 作為結束。

#error #warning

用來向用戶發送消息。預處理器會在 #error 處, 而不會在 #warning 處停下來. 兩種情況下他都會發送他在指令背后(的括號里面)發現的字符串, 發送到屏幕作為輸出,因此它是一種確保針對你的平臺一切OK的手動方式.

#line

用來在你遇到編譯錯誤時修改顯示的錯誤行號和文件名. 例如,加入你需要查看一個來自編譯的中間文件的源文件(可能是自動生成的).

#pragma

其它由編譯器解釋的特殊指令。你的編譯器文檔會告訴你指令是怎么用的,而你不要假定他們在全世界都通用哦.

#assert #unassert

這些在老程序里面總是特別受歡迎的 (好吧,只要我也曾經為這樣一個程序工作過), 但是它們在現在已經過時了。強烈建議不使用它們,這意味著不要把他們放到新的代碼里面

預定義宏

有許多可以利用的預定義宏:

__FILE__ 給出一個字符串的文件名

__LINE__ 給出當前的行號(整型)

__DATE__ 當前編譯日期的字符串

__TIME__ 當前編譯時間的字符串

__STDC__ 同編譯器相關的,但常常被定義成1,以聲明同ISO C標準兼容.

__cplusplus 在編譯一個C++程序是總是會被定義

特別是開頭兩個在調試時真的非常有用。只要拿出它們倆,不用你自己編寫文件和行處理類,就能神奇的讓你獲得豐富的信息輸出.

你的編譯器可能還支持其它的宏,例如,你這從 這里 獲得(面向GCC)的整個宏清單.

那么當你運行預處理器時實際會發生什么呢?

1. 替換所有的三字母組合,我會在將來的一篇文章中談論到他,因為盡管他只是一個歷史上的特性(而且你也要在GCC中對它進行切換),它仍讓是很有趣的.

2. 將并列的源代碼分成多行.

3. 移除所有的注釋并用一個空格替換.

4. 處理(我們上面講到的)的預處理器指令。對于 #include, 他會在新文件上遞歸執行1 - 3步 :-)

5. 處理轉義序列.

6. 把文件發送給編譯器

如果你想看看預處理之后你的文件會是什么樣子 (誰不想呢?),你可以向 gcc 傳入 -E 選項. 這將會想stdout標準輸出發送預處理過的源代碼,并且沒有編譯和連接就直接終止gcc命令的執行。

例如

 

 
  1. g++ -E myfile.cpp 

你也可以使用這個參數:

 

 
  1. -save-temps 

編譯的后會有一份臨時文件。

拿下面這個簡單的程序說吧:

 

 
  1. #include <stdio.h> 
  2.  
  3. #define ONE 1 
  4. #define TWO 2 
  5.  
  6. int main() 
  7. printf("%d, %d/n", ONE, TWO); 
  8. return 0; 

用下面這行命令編譯

 

 
  1. g++ hello.cpp -save-temps 

編譯完后, 會在文件夾中生成兩個文件: hello.s 和 hello.ii

hello.s 里面是匯編代碼, 而 hello.ii 則是預處理過后的源代碼。

用文本編輯器打開 hello.ii , 你會發現多出許多代碼. 那是因為 #include 指令把 stdio 頭文件的代碼加進去了。

如果你把滾動條拉到最底下, 就會發現, printf 那一行的宏定義 ONE 和 TWO 已經被預處理器替換成 1 和 2 了 .

神奇吧!

其實它只是在編譯的時候, 把你的源代碼文件復制一份, 當作臨時文件, 然后把里面的預處理指令替換掉. 用完后就把這個臨時文件刪了. 所以一般情況下我們不知道這個文件的存在.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品mp4| 高跟丝袜一区二区三区| 国产午夜精品全部视频播放| 亚洲一级片在线看| 国产日本欧美一区二区三区| 欧美激情18p| 国产不卡av在线| 亚洲精品日韩欧美| 亚洲人线精品午夜| 98精品国产自产在线观看| 川上优av一区二区线观看| 中文字幕在线看视频国产欧美在线看完整| 亚洲影院污污.| 久久99精品久久久久久青青91| 欧美伦理91i| 欧美福利视频在线| 日韩中文字幕在线免费观看| 中文字幕精品一区二区精品| 亚洲精品自拍第一页| 亚洲男人第一网站| 91网站免费看| 成人久久18免费网站图片| 色妞一区二区三区| 欧美国产日产韩国视频| 国产精品免费视频久久久| 日韩亚洲第一页| 欧美视频在线观看免费| 久久资源免费视频| 国产精品91一区| 原创国产精品91| 日韩中文字幕在线看| 久久久久免费精品国产| 国产一区二区久久精品| 影音先锋欧美精品| 国内免费久久久久久久久久久| 日韩在线不卡视频| 亚洲人成绝费网站色www| 国产98色在线| 亚洲石原莉奈一区二区在线观看| 岛国精品视频在线播放| 日韩精品黄色网| 日韩av免费在线| 51色欧美片视频在线观看| 欧美老女人在线视频| 国产精品激情av在线播放| 国自在线精品视频| 日韩精品免费在线观看| 日韩欧美极品在线观看| 免费不卡欧美自拍视频| 久久久精品网站| 欧美激情视频一区二区| 久久香蕉国产线看观看av| 黑人欧美xxxx| 日本免费久久高清视频| 亚洲国产高潮在线观看| 欧美性生活大片免费观看网址| 久久久久久久久中文字幕| 亚洲剧情一区二区| 亚洲韩国青草视频| 亚洲欧美在线磁力| 亚洲国产精品电影| 欧美中文字幕在线播放| 亚洲精品国精品久久99热一| 2019亚洲日韩新视频| 成人网欧美在线视频| 91沈先生在线观看| 久久久久五月天| 欧美日韩免费在线| 国模精品视频一区二区三区| 亚洲日韩欧美视频| www.欧美免费| 国产精品电影在线观看| 国产一区二区三区日韩欧美| 欧美激情一级二级| 欧美视频在线观看免费网址| 尤物九九久久国产精品的特点| 日韩欧美亚洲国产一区| 国产精品青青在线观看爽香蕉| 91在线视频免费| 国产欧美最新羞羞视频在线观看| 欧美日韩电影在线观看| 亚洲系列中文字幕| 这里只有精品在线观看| 亚洲国产一区二区三区四区| 日韩精品在线免费| 日韩av综合网站| 永久免费毛片在线播放不卡| 国产一区二区三区在线看| 亚洲国产精品成人一区二区| 91精品久久久久久久| 中文字幕日韩综合av| 一本色道久久综合狠狠躁篇怎么玩| www.亚洲天堂| 欧美猛交ⅹxxx乱大交视频| 国产亚洲精品成人av久久ww| 亚洲国产成人精品久久| 国内免费久久久久久久久久久| 国产精品成人免费电影| 国产精品日韩电影| 欧美一二三视频| 中文字幕精品网| 亚洲国产欧美在线成人app| 国模叶桐国产精品一区| 国产精欧美一区二区三区| 高清欧美电影在线| 精品国产精品自拍| 国产精品爽爽爽| 亚洲黄页视频免费观看| 亚洲精品视频网上网址在线观看| 91精品国产综合久久香蕉922| 亚洲精品一区二区三区不| 欧美性猛交xxxx免费看| 欧美亚洲在线播放| 精品国产乱码久久久久酒店| 久久久久久噜噜噜久久久精品| 国产成人在线亚洲欧美| 亚洲国内高清视频| 久久精品亚洲一区| 欧美性xxxxhd| 欧美性猛交丰臀xxxxx网站| 久久亚洲精品网站| 国产精品视频yy9099| 欧美天天综合色影久久精品| 久久久视频在线| 中文字幕在线精品| 日韩高清欧美高清| 97视频在线观看免费高清完整版在线观看| 亚洲伊人成综合成人网| 精品动漫一区二区三区| 日韩亚洲精品电影| 精品人伦一区二区三区蜜桃免费| 久热精品视频在线免费观看| 久久综合亚洲社区| 91午夜理伦私人影院| 精品高清美女精品国产区| 中日韩午夜理伦电影免费| 亚洲图片欧美日产| 欧美丰满少妇xxxxx| 亚洲欧美制服第一页| 国产精品视频网| 韩剧1988在线观看免费完整版| 日韩精品欧美激情| 国产精品第七影院| 日韩免费在线播放| 国产精品18久久久久久麻辣| 精品视频在线播放色网色视频| 国产精品www网站| 久久久国产一区| 国产精品影院在线观看| 国产亚洲精品久久久优势| 精品一区二区三区四区在线| 中文字幕一区电影| 欧美多人乱p欧美4p久久| 在线电影欧美日韩一区二区私密| 91精品视频免费看| 97人人爽人人喊人人模波多| 久久精品男人天堂| 亚洲精品自在久久| 亚洲加勒比久久88色综合| 精品国产乱码久久久久久虫虫漫画| 欧美激情视频网址| 亚洲国产一区自拍| 91高潮在线观看| 精品视频在线播放色网色视频|