Linux 下面 cc 就是 gcc ……
你可以去 gcc.gnu.org 看看 gcc 的文檔,參數多的頭暈。
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Invoking-GCC.html#Invoking-GCC
⑵ 編譯器或者鏈接器會優化掉虛表嗎
編譯器能否優化掉虛表信息的關鍵點是「虛表是否有用」或者「是否是死代碼」,如果編譯器能夠知道當前的目標文件作為main可執行體或者作為動態庫,那麼編譯器就可以有選擇地優化掉虛表信息。但是關鍵是編譯器並不知道當前的文件是否是main可執行體,所以編譯器會做保守選擇,不去優化虛表信息。
從以下幾個方面來看,編譯器不太可能作虛表相關的優化:
1.通常情況下,編譯器只能看到一個編譯單元。編譯器不能確定是否只有一個子類,或許幾個月後心血來潮,你又添加了一個子類,編譯然後和以前的目標文件鏈接在一起。
2.另外考慮到動態載入,在編譯該文件很長時間之後,你仍然能夠添加更多的子類。如果我是個編譯器作者,我不會去冒險提供這樣的優化。
3.另外完全沒有必要。如果你擔心虛函數的效率問題,你完全可以使用CRTP(curiously recurring template pattern)來實現靜態多態。
雖然不可能優化掉虛表或者虛函數信息,但是編譯器做到了另一項優化,就是在虛函數調用做到靜態決議,如果當前虛調用能夠在編譯期確定,就無需獲取對象地址賦給eax,然後再獲取虛表地址或者調整對象首地址獲得虛表地址,再在上面加上下標來jmp到正確的地址上去(其實,下標在編譯時就是已經確定好的)。
⑶ 我下載了一個c語言編譯器,如圖,編譯完成後怎樣運行呢
沒看到你發的圖片,你可以看下這個文檔,很詳細 http://jingyan..com/article/2f9b480d4cdeed41ca6cc258.html
⑷ C/C++編譯器中虛表是如何完成的
編譯器會搜集一個類的所有虛函數,並在編譯時生成一個虛函數表。然後編譯器實際上會在類的構造和析構函數中加一些代碼來達到初始化虛表指針和改變虛表指針的目的。
⑸ 如何在Linux中安裝cc和gcc編譯器
方法如下: 一:掛載yum源,在終端輸入指令:mount -o loop xxxx.iso /media/CentOS/ 說明:xxxx.iso 是你的鏡像文件名(注意路徑正確) /media/Centos/ 這個是掛載後文件地址,Centos是自己建的,也可以自己選著路徑; 二:修改/etc/yum.repos.d/CentOS-Media.repo 1.首先進入文件: vi /etc/yum.repos.d/CentOS-Media.repo 2.修改文件如下: [c6-media] name=CentOS-$releasever - Media #名字而已 baseurl=file:///media/Centos #剛剛掛載鏡像的地址 gpgcheck=1 enabled=1 gpgkey=file:///etc/media/Centos/RPM-GPG-KEY-CentOS-6 3. 退出保存。 4.輸入指令:gcc -v 看看有沒有反應。
⑹ cc gcc編譯器怎麼使用
gcc --help可以看gcc的編譯選項
常用的有
gcc -c xcxcx.c : -c 編譯C代碼,生成該文件的obj文件
gcc xcxcx.o -o dest : -o 鏈接各個obj文件,生成目標執行程序
-I : (這里是大寫i) 表示頭文件路徑
-L : 表示庫文件路徑
-l : (這里是小寫的L) 表示需要鏈接的庫文件
-O: (這里是大寫英文o) 表示優化參數
-WALL: 表示warning等級
這里是一句完整的話
g++ -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-static/lib -o Qt_V4L_ShowImage main.o myWidget.o v4lThread.o moc_myWidget.o moc_v4lThread.o -L/usr/local/Trolltech/QtEmbedded-static/lib -lQtGui -L/usr/local/tslib/lib -L/usr/local/Trolltech/QtEmbedded-static/lib -L/usr/local/lib -L/home/root/ffmpeg/lib -lts -lQtNetwork -lQtCore -lc -lgcc -lm -lrt -ldl -lpthread -lavcodec -lavformat -lavutil -lx264 -xvidcore -lcv -lhighgui -lcvaux -lcxcore
不過還是自己看一下gcc的help比較好,那裡講的全面些
⑺ linux下c語言編譯器的工作原理是怎麼樣的/
c語言編譯器的工作原理都差不多的。一般來說分為四個階斷;
1、預處理階斷,主要是文本替換操作。有預處理器完成。
2、編譯階斷,將C源碼生成匯編代碼,這個是有C語言編譯器來完成的,默認linux下是cc。
3、匯編階斷,將匯編代碼,生成相應的可執行體,即二進制文件。
這個過程都可以自己通過給gcc加入參數來詳細的獲取這些過程的,具體可以參考:http://jingyan..com/article/03b2f78c1d6ede5ea237aed7.html
⑻ 有關armcc編譯器的問題
如在如下子目錄中:d:\new\01
可用下述命令:armcc d:\new\01\filename.c
[格式]有多長寫多長,後邊加個:\<文件名>
⑼ 為什麼 gcc能編譯它 cc編譯出錯
從名字上看,老的unix系統的CC程序叫做C Compiler。但GCC這個名字按GNU的說法叫做Gnu Compiler Collection。因為gcc包含很多編譯器(C, C++, Objective-C, Ada, Fortran,and Java)。所以它們是不一樣的,一個是一個古老的C編譯器,一個是編譯器的Gnu的編譯器的集合(Gcc里的C編譯器比CC強大太多了,所以你沒必要用CC)。當你調用gcc時不一定是調用的C/C++編譯器,是gcc根據文件擴展名自動識別並調用對應的編譯器,具體可查閱$man gcc。