編譯器runtime
1. 編譯器不會強製程序員處理哪種異常
在java編譯器中,是不會強制要求程序員進行處理Runtime異常的。
RuntimeException類及其子類的實例被稱為運行時異常,即UnChecked Exception。
我們較為常見的NullPointerException(空指針異常)和 IndexOutOfBoundsException(數組越界異常),對於這些Runtime異常。
在java編譯器中是不會強制要求程序員進行處理或聲明的(有些IDE可能會給可能出現Runtime異常問題的提示,但不會報錯)。
常見的RunTime異常幾種如下:
NullPointerException - 空指針引用異常。
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常。
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常。
IndexOutOfBoundsException - 下標越界異常。
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常。
NumberFormatException - 數字格式異常。
SecurityException - 安全異常。
UnsupportedOperationException - 不支持的操作異常。
2. 編譯環境有哪些
問題一:java的編譯環境是什麼 JDK(Java Development Kit,Java開發包,Java開發工具)是一個寫Java的applet和應用程序的程序開發環境。它由一個處於操作系統層之上的運行環境還有開發者編譯,調試和運行用Java語言寫的applet和應用程序所需的工具組成。
JDK(Java Development Kit)是Sun Microsystems針對Java開發員的產品。自從Java推出以來,JDK已經成為使用最廣泛的Java SDK(Software development kit)。
JDK包含的基本組件包括:
・javac C 編譯器,將源程序轉成位元組碼
・jar C 打包工具,將相關的類文件打包成一個文件
・javadoc C 文檔生成器,從源碼注釋中提取文檔
・jdb C debugger,查錯工具
JDK中還包括完整的JRE(Java Runtime Environment,Java運行環境),也被稱為private runtime。包括了用於產品環境的各種庫類,以及給開發員使用的補充庫,如國際化的庫、IDL庫。
JDK中還包括各種例子程序,用以展示Java API中的各部分。
從初學者角度來看,採用JDK開發Java程序能夠很快理解程序中各部分代碼之間的關系,有利於理解Java面向對象的設計思想。JDK的另一個顯著特點是隨著Java (J2EE、J2SE以及J2ME)版本績升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java應用開發非常困難,不能進行復雜的Java軟體開發,也不利於團體協同開發。
JDK一般有三種版本:
SE(J2SE),standard edition,標准版,是我們通常用的一個版本
EE(J2EE),enterpsise edtion,企業版,使用這種JDK開發J2EE應用程序,
ME(J2ME),micro edtion,主要用於移動設備、嵌入式設備上的java應用程序
問題二:C語言的編譯環境用哪個? 哪個不要臉的說TC 丟人
反而是有些垃圾用功能較強的編譯工具
用TC,學會自己寫函數 記住不要用中文的
那些說TC丟人的就是用的中文,英語都不懂還弄個毛編程
朋飢,我建議你堅持用TC2.0, 對新手最有幫助的!
問題三:c程序語言中的編譯系統是什麼?編譯環境又什麼什麼? C語言代碼是.C的文本文件。
需要用編譯程序把.C文件翻譯.OBJ,然後用連接程序再弄成.EXE文件。
編譯程序就是那個把.C變成.OBJ的程序
編譯環境就是把編譯程序、連接程序以及其他一些方便程序員寫程序的東西綜合在
一起形成的一套系統,程序編譯環境...
希望對你有幫助
問題四:C++編譯軟體和環境有哪些? 用DEV C++吧,我一直用這個
問題五:Renesas MCU的編譯環境有哪些? 你可以登錄官網查詢
問題六:C++的編譯器都有哪些啊?謝謝!!!! 編譯器很多的:
Visual C++
GNU C++
Inter C++
Sun C++
clang
。。。。。
等等。
一般都用VC和GNU C++,其他的都是專業人士使用的。。。。
樓上的回答是復制互。。。。太NC
關於IDE,C++有很多,一些其他語言的IDE現在也支持C++了
給你介紹一些:
Visual Studio系列(目前最新版本是VS2013)
Dev C++(目前最新非官方版是Dev c++ 5.4.1)
Code Block
NetBeans
C-Free(貌似不好用)
。。。
問題七:編譯程序與集成開發環境有什麼不同?舉例說ming 以下選自網路:
集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟體服務套。
換句話說,編譯器只是集成開發環境的一部分。
比如最常見的集成開發環境:Visual Studio(其使用的編譯器是cl(貌似今年會集成clang編譯器))。
除cl外,比較常見的編譯器還有gcc。
問題八:C++的開發環境有哪些?哪個C++的開發環境要好一些呢? c++builder 2010 最好用了。
初學者,最好不要去學VC雞c++並身就難學了,還要來一個VC。
還是用c++builder,入門簡單,上手容易,
但你C++用熟了,再去整VC事斗功倍,不聽老人言,吃虧在眼前。
問題九:什麼是集成開發環境? development SDK
就是寫代碼,編譯,鏈接做在一個場件中的東東
比如VB.NET ,turbo C
你知道,從前編寫程序不是這樣的,通常需要你在記事本中把代碼寫好存檔,然後以這個文件為參數,運行編譯程序,鏈接程序,最後才能生成可執行的機器代碼
3. 什麼是Runtime
runtime就是程序運行時的狀態
還有一個compiletime,就是編譯時代狀態
程序設計中要避免runtime的錯誤,compiletime的錯誤由編譯器檢測。
4. microsoft visual c++是什麼
Microsoft Visual C++(MSVC) 是 Microsoft 的C、C++和C++/CX編程語言的編譯器。
MSVC 是專有軟體;它最初是一個獨立的產品,但後來成為Visual Studio的一部分,並以試用軟體和免費軟體的形式提供。它具有用於開發和調試C++ 代碼的工具,尤其是為Windows API、DirectX和.NET編寫的代碼。
許多應用程序需要可再發行的 Visual C++ 運行時庫包才能正常運行。這些包通常獨立於應用程序安裝,允許多個應用程序使用該包,而只需安裝一次。這些 Visual C++ 可再發行包和運行時包主要是為許多應用程序使用的標准庫安裝的。
Visual C++以擁有語法高亮、IntelliSense(智能提示)以及高級調試功能而著稱。比如,它允許用戶進行遠程調試,單步執行等。
還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及創建預編譯頭文件(stdafx.h)、最小重建功能及累加鏈接(link)著稱。這些特徵明顯縮短程序編輯、編譯及鏈接的時間花費,在大型軟體項目上尤其顯著。
工具鏈生態環境
1、Universal CRT (UCRT)包含了C99運行時庫的函數與全局變數。UCRT現在是Windows component,隨Windows 10安裝。UCRT的靜態庫、DLL的導入庫、頭文件是Windows 10 SDK的一部分。
2、vcruntime庫包含Visual C++ CRT實現相關的代碼,如異常處理、調試支持、運行時檢查、類型信息、實現細節與特定擴展庫函數。 vcruntime庫相關於特定編譯器。
3、CRT初始化庫處理進程啟動(CRT startup)、內部的逐線程的初始化、終止。CRT初始化庫相關於特定編譯器。
4、對於本地代碼與受管代碼混合的情形,使用/clr編譯選項,這會動態鏈接 UCRT與vcruntime,靜態鏈接msvcmrt.lib或msvcmrtd.lib;svcmrt.lib或msvcmrtd.lib提供了受管代碼與本地CRT之間的proxy。
5. iOS Runtime理解
runtime
概述: runtime又叫運行時,是一套底層C語言API,是iOS系統的核心之一。開發者在編碼過程中,可以給任意一個對象發送消息,在編譯階段只是確定了要向接受著發送這條消息,而接受者如何響應和處理這條消息,就要看運行時來決定了
C語言中,在編譯器就確定要調用哪個函數,而OC的函數,屬於動態調用過程,在編譯器並不能真正決定調用哪個函數,只有在真正的運行時才會根據函數的名稱找到對應的函數來調用。OC是一個動態語言,這意味著它不僅要一個編譯器,也需要一個運行時系統來動態創建類和對象、進行消息傳遞和發送
1.消息轉發
Runtime的特性主要是消息傳遞,如果消息在對象中找不到,就進行轉發。Objective-C是一個動態語言,這意味著它不僅需要一個編譯器,也需要一個運行時系統來動態創建類和對象、進行消息傳遞和轉發。Runtime的核心是消息傳遞。
(1)消息傳遞的過程
一個對象的方法[obj test],編譯器轉成消息發送objc_msgSend(obj,test),Runtime執行的流程是這樣的
a.首先通過obj的isa指針找到它的class
b.在class的method list找test
c.如果class中沒找到test,繼續往它的superclass中找
d.一旦找到test這個函數,就去執行它的IMP
由於效率問題,每個消息都遍歷一次objc_method_list並不合理,所以需要把經常被調用的函數緩存下來,去提高函數查詢的效率。這也就是objc_class中另一個重要的成員objc_cache做的事情。找到test之後,將test的method_name作為key,method_imp作為value。當再次收到test消息的時候,可以直接在cache里找。
類對象(objc_class)
Objective-C類是由Class類型來表示的,它實際上是一個指向objc_class結構體的指針。struct objc_class結構體裡面定義了很多變數。結構體里保存了指向父類的指針、類的名字(name)、版本、實例變數列表(ivars)、方法列表(methodLists)、緩存(cache)、遵守的協議列表(protocols),由此可見,類對象就是一個結構體struct objc_class,這個結構體存放的數據就是元數據
理解Runtime就是理解iOS在運行時他的數據存儲以及他的類、實例、類對象、元類她們之間的關系和作用。
(2)消息轉發機制
歸根到底,Objective-C中所有的方法調用本質就是向對象發送消息
1.類中創建方法-(void)test
2.iOS系統為這個方法創建一個編號,SEL(test)並添加到方法列表裡面
3.當調用這個方法的時候系統去方法列表裡查找這個方法,找到了就執行
所以,調用一個方法就會進行一次發送消息也就是在這個類的方法列表裡找,如果在該類中找不到就到該類的父類里找,如果父類還找不到就一直搜索到繼承樹的根部,如果找不到或者消息轉發不成功那就會報unrecognized selector錯。
1.動態方法解析
Objective-C運行時會調用+resolveInstanceMethod:或者 +resolveClassMethod:讓你有機會提供一個函數實現,如果你添加了函數並且返回YES,那麼運行時就會重新啟動一次消息發送的過程。如下圖:
雖然沒有foo:的實現函數,但是通過class_addMethod()動態添加了fooMethod函數,並執行了這個函數並且列印成功。如果reslove返回NO運行時就會移到下一步:forwardingTargetSelector
2.直接消息轉發
如果目標對象實現了forwardingTargetSelector,Runtime這時就會調用這個方法,給你把這個消息轉發給其他對象的機會
從圖中可以看出我們通過forwardingTargetForSelector方法將當前類的方法轉給Father類實現了,列印成功。
3.完整消息轉發
如果在上一步還不能處理未知消息,那唯一能做的就是啟動消息轉發機制。首先它會發送methodSignatureForSelector消息獲得函數的參數和返回值類型。如果methodSignatureForSelector返回nil,Runtime則會發出doesNotRecognizeSelector。如果返回一個簽名函數,Runtime就會創建一個NSInvocation對象並發送forwardInvocation消息給目標對象。
Runtime的實際應用
1.使用Runtime交換方法
2.動態添加方法(目前不是很懂)
3.給分類添加屬性
4.消息轉發(熱更新)解決Bug(JSPatch)
6. 匯編編譯器在win10環境下想編譯,卻說Runtime error 53找不到文件,咋辦,
如果軸網是用創建軸線的對話框來創建的話,點右鍵 --選擇-- 適合工作區域至整個模型,如果深度和顯示過濾中設置正確,軸線應該顯示出來 如果你拉的是單根軸線,確保在你拉單根軸線前已有建成的軸線,看看是不是你操作不正確。