A. C++中vs能不能自動檢測到需要的頭文件
據我所知沒有 編譯器沒有自動添加頭文件的功能
你這里是不是應該是 #include <string>啊?
很高興和你一起討論和學習C++
B. qt ctreator怎麼 無法自動檢測出 vs2015編譯器
vs中c和c++的編譯器是同一個,vs會自動根據擴展名、代碼自動調用不同的編譯參數來對代碼進行編譯。
C. qt creator 自動檢測 沒有
1、Linux下Qt Creator的配置
從Dash中找到Qt
Creator,打開,打開後可以看到主界面,這個界面和Windows下基本一致(後面安裝windows版本就清楚了),在前面的兩篇文章中我已經分
別編譯了Linux下的X86平台和ARM平台的QT庫,這部分就針對這個IDE進行相應的配置,是能夠進行應用程序的開發。
在主界面中從菜單欄點擊"工具"->"選項"->在左側點擊「構建和運行」界面如下圖所示。
從
圖中可以看到,IDE並沒有自動識別安裝的QT,這是因為在缺乏系統環境變數的情況下,不知道程序安裝到了什麼地方,所以這里需要手動設置,手動設置很簡
單,只需要點擊添加,分別添加編譯的兩個版本的QT安裝文件中的qmake文件即可,注意是安裝文件,並不是之前解壓的源文件。
默認的安裝路徑為/usr/local/Trolltech這個文件夾下有兩個文件夾,具體路徑可以參見上圖。
到這里就告訴IDE 安裝QT的位置了,由於需要進行編譯開發,接下來還需要指定編譯器,點擊「編譯器」選項卡,如下圖所示。
如圖中所示,Qt Creator已經檢測到X86的GCC,而我們要是做arm平台開發的話還需要指定用於arm開發的交叉工具鏈,我的安裝路徑為/usr/local/arm/4.3.2/bin/需要指定g++文件,如圖中所示。配置完成後,點擊「應用」。
QT和編譯器指定完成後就需要進行下一步配置了,就是對這些工具進行組合,點擊「構建套件(kit)」選項卡,如下圖所示。
如上圖所示,這里所做的設置也很簡單,相當於是設定幾種方案,指定設備類型、所用的編譯器版本以及QT版本,我這里配置桌面和ARM兩項,分別對應在PC和開發板兩個平台。
到這里,基本配置就完成了。
2、使用Qt Creator進行初步開發
下面新建一個項目,點擊菜單 」文件「->」新建「,如下圖所示,選擇應用程序-Qt Gui應用
接
下來填寫項目名稱和選擇保存位置,點擊」下一步「選擇構建套件,這里用於選擇使用的構建套件,即上文配置的,按照上文配置我這里就有兩個套件,桌面和
ARM,這個地方後面是可以更改的,因此我這里還是先選擇桌面,下面有對應的Debug與Release這里保持默認。接下來全部保持默認一直到完成。
工程新建完成後就可以看到工程目錄即文件了,如下圖所示。
第
一個常式就不添加啥程序了,充分利用IDE設計的方便之處,拖拽幾個控制項運行示意一下吧,雙擊上圖中的界面文件下的mianwindow.ui文件,接下
來就能看到和VS下利用C#等開發非常類似的界面,可以從左側選擇一些控制項,右下角可以針對具體的控制項屬性進行修改,如下圖所示,拖出自己需要的控制項,並
進行簡單修改。
我這里拖了幾個作為示意,這部分弄好後,點擊左下角的
直接運行,構建完成後就會彈出剛剛設計的界面,如下圖所示。
可
以看到實際運行效果和編輯的情況由於字體等因素略有差異。接下來就要生成一個能夠在開發板上運行的程序了,由於剛剛在新建項目的時候構建套件選擇的是桌
面,所以首先要對這點進行更改。如下圖所示,點擊
」項目「--」添加構建套件「下方就會彈出我剛剛設定的ARM,在arm的構建設置中可以使用默認配置,其他相關選項可以參考桌面選項更改。
需
要說明的是在ARM的運行項目中,需要部署到遠程運行,這里沒有部署,因此在剪輯編輯進行構建的時候,就不能改直接運行了,點擊錘子圖標,進行構建,構建
完成後可以在工程文件夾下,如下圖所示,那麼在ARM開發板上運行的程序就在test1-build-ARM-_____Debug文件夾下。
接下來把生成的可執行文件拷貝到開發板進行運行,我這里使用的是nfs掛載的方式,通過超級終端運行
./test1 –qws
運行程序,需要說明的是我使用的開發板是飛凌的OK6410,上面已經移植好了QTE 4.7.3,雖然我的版本是4.8.4但是運行沒有問題,其他平台需要先移植QT,這個暫時不在本文的討論范圍之內,運行效果如下:
到這里,用於開發板運行的第一個小程序就跑起來了。
3、Windows下Qt的安裝
Linux下的安裝和配置搞定了,Windows下的就非常簡單了,Windows下有針對VS2008/2010以及Mingw的版本,雖然我電腦里裝了VS2010,這里還是決定安裝Mingw的版本,首先下載相關文件,下載地址:
http://qt-project.org/downloads
需要說明的是,早期有SDK安裝包的,現在都是單獨的了,所以需要分別下載
qt-win-opensource-4.8.4-mingw.exe
qt-creator-windows-opensource-2.6.1.exe
MinGW-gcc440_1.zip 下載地址http://get.qt.nokia.com/misc/MinGW-gcc440_1.zip
如果想在VS中使用可以下載
qt-vs-addin-1.1.11.exe
qt-win-opensource-4.8.4-vs2010.exe
由於Mingw並沒有被qt-win-opensource-4.8.4-mingw.exe安裝包集成,所以需要先安裝mingw,安裝很簡單,直接解壓到指定的目錄就行,我的路徑d:/mingw。
接下來安裝qt-win-opensource-4.8.4-mingw.exe,按照過程中會要求指定mingw,指定剛剛的解壓目錄即可。
然後安裝qt-creator-windows-opensource-2.6.1.exe,這個不用多說了。
安裝完成後打開Qt Creator,通Linux下的設置一樣,打開設置,這里只需要指定mingw的目錄即可,同樣指定到g++工具,如下圖所示,可以看到兩者界面幾乎一樣,下面的操作就基本一致了,只是這里沒有配置用於arm平台的工具鏈。
D. 請問編譯器的自動提示功能是如何實現的
沒有什麼特殊的辦法,就是用戶在輸入代碼的同時(而不是編譯時)就在內存中建立代碼DOM,實時地進行檢測。
E. 我運行codeblack出現這種情況是啥意思 Target uses an invalid c
目標使用無效的編譯器;運行中止。
F. gcc編譯器在編譯過程會進行哪些檢查
一個編譯器,執行的時候
先會做詞法分析,其中會判斷是否符合詞法規范,一般用有限自動機寫
然後是語法分析,自頂向下的LL和自底向上的LR,會判斷是否符合文法規范
然後就是四元式,語義動作、匯編指令,後面的檢查應該就不多了
G. 編譯器本身是如何進行測試的
編譯器最重要的性質就是保證語義的正確。比如,從高級語言翻譯到機器指令之後,指令必須正確的表達原來程序的意思。所以一般編譯器測試都包含一些源程序,用來覆蓋可能出現的各種情況。基本的原則是:原來程序的結果 = 編譯後機器指令運行的結果。機器指令運行的結果很容易知道,運行一下就知道了。可是原來程序的結果你怎麼知道呢?
為了解決這個「原來程序語義」的問題,最好是寫一個解釋器,准確無誤的表達原來的代碼的語義。所以我們的要求就是:
高級語言解釋器(源程序) = 機器執行(機器代碼)
由於處理器其實就是一個用來執行機器代碼的解釋器,這里有一個很美好的對稱關系:
interp1(L1) = interp2(L2)
另外還有一個問題,就是編譯器一般需要經過多個轉化步驟(叫做 pass)才能最後編譯為機器指令。比如,
L2 = pass1(source)
L3 = pass2(L2)
L4 = pass3(L3)
Ln = passN(Ln-1)
machine_code = codegen(Ln)
由於源程序經過了很多步驟猜得到最後的機器指令,如果你使用上面的公式,就會出現以下一些情況:
1. 知道結果錯了,但是卻不知道到底是哪一個 pass 錯了。
2. 結果沒有錯,但是中間卻有 pass 實際上是錯的。但是由於之前的 pass 把輸入程序的一些結構給「優化」掉了,所以錯的那個 pass 其實沒能得到觸發錯誤的那個數據結構。所以測試沒能發現錯誤。如果以後前面的那個 pass 被修改,錯誤就會暴露出來。這是非常難以發現的潛伏的危險。
為了防止這些情況出現,一些編譯器(比如 Chez Scheme 和 Kent Dybvig 的課程編譯器)使用了對每一個 pass 進行測試的做法。具體的方法就是為每一個中間語言都寫一個解釋器,把這語言的語義完全的表示出來。這樣我們就需要檢查一組等式:
L2 = pass1(source)
高級語言編譯器(源程序) = interp2(L2) // 測試 pass1 的正確性
L3 = pass2(L2)
interp2(L2) = interp3(L3) // 測試 pass2 的正確性
這樣一來我們就能獨立的判斷每一個 pass 的正確性了。
這些是基本的語義測試原理。另外除了語義,可能還有一些「表面」一些的測試,它們看代碼本身,而不只看它的語義。比如尾遞歸優化的測試應該確保輸出程序的尾遞歸得到正確的處理,等等。這些是語義測試檢查不到的,因為尾遞歸沒有正確處理的程序大部分也能輸出正確的結果。
普通的單元測試方法也可以用來測試一些編譯器里的輔助函數,但那些不是編譯器特有的,所以就不講了。
另外,就像所有測試的局限性一樣,你沒法枚舉所有可能出現的輸入,所以以上的測試方法其實也不能保證編譯器的完全正確。
H. 用eclipse 編寫java代碼時,他為什麼能自動識別語法錯誤及給出正確的寫法這是JAVA編譯器的哪種特性
這是靠eclipse自帶的插件實現的,的確屬於靜態分析。動態分析我不太了解,可能會涉及到jvm,但主要是在編譯器內獲取一些動態信息,如果想對java的多態進行分析就需要動態分析,即在編譯時獲取具體調用的類的信息。但如果是問eclipse的語法糾錯,遠沒涉及那麼高級的內容。
如果你去看eclipse文件夾下的plugins文件夾,你能找到類似org.eclipse.jdt.XXX.XXX的若干jar文件,那些包就是eclipse專門用以處理java代碼分析工作的jdt插件工具包。他能抽取java代碼的AST(抽象語法樹),也就是編譯時用到的數據結構,你若學過編譯原理就知道了,反正我還沒學。如果做一些java方面的逆向工程,你甚至可以引用eclipse的jdt包,將java項目的代碼通過相應介面(你可以在網上找到jdt的api和實例代碼)傳進去,獲取代碼中的類,欄位,方法,和更細節的信息。
而jdt中也包含檢測,處理語法錯誤的包,可以發現並糾正語法錯誤。這一特點還可以用來做一些正向工程(如自修改或動生成代碼)。
哦,還有,針對你的問題還要說,這點特性不是編譯器的,而是編輯器eclipse的。注意,絕對是編輯器的特點!雖然涉及到語法問題,但在eclipse糾錯時,還沒有調用編輯器,即程序還沒有編輯。只有在運行程序前eclipse才會調用編輯器。編譯一次不容易,每次糾錯都調用編譯器的話開銷太大,糾錯的反應速度絕對不會像平時eclipse做的那麼快。
實際上eclipse可以說就是由各種插件組成的,它本身只提供一個供各種插件運行的平台,本身功能很簡單,但就是通過向jdt這樣的插件包實現各種復雜的功能。
I. codeblocks使用什麼編譯器編寫
1,安裝 Code:Blocks安裝版本有兩個,一個是不帶MinGW,一個是帶MinGW(GNU工具在Windows上的一種移植,裡面有GNU編譯器套件) 當然Code:Blocks裡面也支持其他編譯器,比如微軟的VS C++,Code:Blocks會自動偵測,或者你自己可以手動設定
J. c語言編譯器怎麼檢查錯誤的
C語言編譯器有好多種
大同小異
有DEV-C++
VC6.0等
檢查錯誤
都能檢查
但只能檢查出語法錯誤
不能檢查出邏輯錯誤