導航:首頁 > 源碼編譯 > 編譯時期確定

編譯時期確定

發布時間:2023-03-30 23:22:24

編譯程序出現在計算機時期的什麼時候

編譯程序出現的計算機時期是:第二代
編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。
20世紀80年代以後,程序設計語言在形式化、結構化、直觀化和智能化等方面有了長足的進步和發展,主要表現在兩個方面:①隨著程序設計理論和方法的發展,相繼推出了一系列新型程序設計語言,如結構化程序設計語言、並發程序設計語言、分布式程序設計語言、函數式程序設計語言、智能化程序設計語言、面向對象程序設計語言等;②基於語法、語義和語用方面的研究成果,從不同的角度和層次上深刻地揭示了程序設計語言的內在規律和外在表現形式。與此相應地,作為實現程序設計語言重要手段之一的編譯程序,在體系結構、設計思想、實現技術和處理內容等方面均有不同程度的發展、變化和擴充。另外,編譯程序已作為實現編程的重要軟體工具,被納入到軟體支援環境的基本層軟體工具之中。因此,規劃編譯程序實現方案時,應從所處的具體軟體支援環境出發,既要遵循整個環境的全局性要求和規定,又要精心考慮與其他諸層軟體 工具之間的相互支援、配合和銜接關系。

⑵ c++ 數組大小必須在編譯時確定 請教

數模襪組大小必須在編譯時確定
這句話是對的。

動態數組實際上並不是一個嚴格意義上的數旦沒激組,
它是先聲明一個指針,再以它只想一個後來分配的連續存儲空間。
這個實際上是一個連續存儲的鏈表的實現。

所以就嚴格的數組的概念察做來說的話,
數組大小必須在編譯時確定,
這句話是對的。

⑶ visual studio 如何在編譯期確定字串長度,特殊宏之類的

宏的作用,只是在編譯期間完成替代,並不能實現計算。因此不要考慮宏實現,這個沒什麼可行性。

編譯期間數羨胡槐值確定,其實可以通過const關鍵字實現,但說實話,這個是「消耗空間換時間」,如果有log的函數太多,太分散,並不值得。

如果log比較集中的在幾個函數中,那麼可以這么做:

constintfnamelen=strlen(__FUNCTION_);
log(__FUNCTION_,fanmelen);
這樣,因為編譯之後__FUNCTION_是一個常量,const 變數會直接從編譯器的符號表中取值(做爛這個叫C++的常量折疊),不會兄友反復計算。


⑷ 為什麼數組要在編譯期確定大小

從變成方面來看:定義一個數組是要用到數據類型的(byte,short,int,long,float,double,char)的, 而調用這些數據類型會在堆中建立該數組的對象,如果想要這個數組有值,那就一定會在數據區開區間,建立該對象的值。所以數組如果要有意義,編譯期肯定要賦值。否則雖然不會報錯,但莫名其面佔用存儲空間總歸不好。

⑸ C++ 虛函數表指針vptr什麼情況下被改變

虛擬表一彎悄個類只有一個.是靜態的.在Main函數之前就初始化了.你的寫法有問題。關於class TEST_API CBase不能被定義兩次。兩個分別是不同的類.一個類只有一個虛擬表。散螞class TEST_API CBase的定義只能有一個頭文件.同時被dll和exe使用。沖鬧埋

⑹ 哪一個數組表達是正確的錯誤的請說明一下為什麼錯誤,我覺得B也好像是正確的。

你好!!
A s2[4,3]的聲明是錯誤的,沒有這樣的形式,要是二維數組的話應該是s2[4][3];
B int n,a[n]在c/c++中要是聲明數組的時候數組的大小是常數,而此時的n是個隨機數,即使:int n=3,a[n]這樣都是錯的,因為編譯器在編譯時期就檢查數組的大小,而此時n的值在運行時期才確定的,要是const int n=3,a[n]才是正確的。因為此時的n是常量,在扮核編歲缺悄譯時期就可乎渣以確定值。

C char st [5]="A" 是正確的,給字元數組賦值就是「」的形式而不是『』,要是C char st [5]=』A『,就錯了

D int x(10),y(10) 也是對的,等價於D int x=10,y=10

⑺ 編譯原理:靜態數組的存儲空間可以在編譯時確定。這句話為什麼是錯的。請給出詳細原因,謝謝。

靜態變數在程序運行過程中只在第一次初始化時,會賦初始值,以後即使再初始化其值也不會改變。
任何變數的存儲空間及存儲在內存中的位置都是由操作系統在程序運行時才分配的,只能說存儲空間的大小是程序裡面的初始化語句決定的。
靜態變數、全局變數和局部變數
1.從作用域看:
C++變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:
全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
1>全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變數定義的源文件需要用extern關鍵字再次聲明這個全局變數。
2>靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束都一直存在,它和全局變數的區別在於全局變數對所有的函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。
3>局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。
4>靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它的文件里,不能作用到其它文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。
2.從分配內存空間看:
1>全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間
2>全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
1)全局變數、靜態全局變數以及靜態局部變數都會被放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它們與堆變數、堆變數的區別。
2)靜態變數(包括靜態局部變數和靜態全局變數)用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
從以上分析可以看出,把局部變數改變為靜態變數後是改變了它的存儲方式即改變了它的生存期。把全局變數改變為靜態變數後是改變了它的作用域,限制了它的使用范圍。因此static這個說明符在不同的地方所起的作用是不同的。應予以注意。
Tips:
A.若全局變數僅在單個C文件中訪問,則可以將這個變數修改為靜態全局變數,以降低模塊間的耦合度;
B.若全局變數僅由單個函數訪問,則可以將這個變數改為該函數的靜態局部變數,以降低模塊間的耦合度;
C.設計和使用訪問動態全局變數、靜態全局變數、靜態局部變數的函數時,需要考慮重入問題,因為他們都放在靜態數據存儲區,全局可見;
D.如果我們需要一個可重入的函數,那麼,我們一定要避免函數中使用static變數(這樣的函數被稱為:帶「內部存儲器」功能的的函數)
E.函數中必須要使用static變數情況:比如當某函數的返回值為指針類型時,則必須是static的局部變數的地址作為返回值,若為auto類型,則返回為錯指針。

閱讀全文

與編譯時期確定相關的資料

熱點內容
k線數字頂部和數字底部公式源碼 瀏覽:365
python協程線程 瀏覽:293
周立功單片機資料 瀏覽:327
程序員大神級演講 瀏覽:286
飛思卡爾單片機培訓 瀏覽:403
解壓神器音樂盒秘密 瀏覽:542
韓國電影愛情推理片劇情 瀏覽:185
江西調度伺服器掛式雲空間 瀏覽:13
vip韓國電視劇李鍾碩 瀏覽:934
stc15單片機驅動步進電機 瀏覽:122
一個壞媽媽金珠 瀏覽:806
申請農業銀行信用卡用什麼app 瀏覽:187
在線看的網站 瀏覽:696
金碟專業版的伺服器如何啟動 瀏覽:404
谷輪壓縮機上海 瀏覽:726
兩對情侶互換的電影 瀏覽:347
linux的解壓gz命令 瀏覽:377
排序演算法的測試用例 瀏覽:411
linux終端編碼 瀏覽:141
程序員決定去擺攤 瀏覽:213