iT邦幫忙

0

初次學習C

1.直譯器只要將程式逐行翻譯 因此所佔用的記憶體較少?
2.原始檔.目的檔.執行檔有何不同?
3.我應該做何設定才能看到目的檔?
3.低.高階語言差異比較?
4."結構化""模組化"得程式語言?
5.C語言可以說是專為程式設計師所設計的語言 他可以直接依記憶體的位址來存取變數?
6.程式語言中的函數模組是指?(stdio.stdlib...?)
7.編譯程式除了檢查與法是否正確(--->這我知道) 還要將標頭檔讀進來(-->這是啥?)
是因為撰寫程式時所用的函數定義再標頭檔中才這樣做的嗎? 或者是檢查程式中的用法是否符合規則(例如..大小寫..?)
8.程式碼是自己寫的 目的碼是編譯出來的? 那機器碼? 這三個有差嗎? 這樣問正確嗎= =
9.main()括號內的void則是表示main()函數不需傳入任何的引數?
10直譯式的語言basic需要用編譯器嗎? 或者只能用直譯器?

雖然很多問題的答案我都想過
可是如果讓有經驗的大大回答或許會更清楚

fillano iT邦超人 1 級 ‧ 2009-08-21 16:12:17 檢舉
既然有想過,是不是也提供一下你的想法?我覺得這樣有互動的方式,大家會更願意發言。
popowei iT邦新手 3 級 ‧ 2009-08-21 17:30:50 檢舉
好在我沒說每一題

2.原始檔就是寫完尚未編譯的 目的檔是編譯過程中產生但看不到 執行檔就是目的黨和函數庫連結後看到的xxx.exe
4.我個人認為結構化就是一種明確的邏輯 寫程式一開始不是都要先規劃一下嗎或者畫流程圖
而模組化我想可能就是指那些既存的函式庫吧 就好像模具一樣有一個就可以大量複製
有函式庫就不用自己再費心去寫(這樣講好像怪怪的)
6.應該就是函式庫了
7.過程中使用到的函數就定義再標頭檔裡面
10.basic 本身好像就是直譯式語言 所以應該用不到編譯器吧...


其他的我也沒什麼定論
回答不好請見諒^^"




fillano iT邦超人 1 級 ‧ 2009-08-21 17:56:17 檢舉
1. 直譯器應該不只是一行一行執行的啦...不過他可以一行一行parse。一些基本的東西,我想上wiki應該找得到,例如剖析器、抽象語法樹等關鍵字。

2. 目的檔其實是已經編譯好的啦,他會在編譯過程中產生,而且看得到(像是*.o或是*.obj等)。linker通常應該會做幾件事情,當然他會把所有東西擺在一起,另外還會根據你要求的執行檔結構(NE、PE、ELF啦)產生執行檔或是動態函式庫(dll這一類的),並且根據需要決定記憶體相對位置、加入程式進入主要進入點前執行的東西等等。


下班去...

2 個回答

10
abc123wayne
iT邦新手 5 級 ‧ 2009-08-22 16:00:28
最佳解答

2.原始檔就是寫完尚未編譯的 ()
目的檔就是編譯器將程式轉換為機器語言碼,電腦才會去"準備執行"
執行檔就是目的黨和函數庫連結後看到的xxx.exe
4.結構化:代表著C的特性,一共有七種,
1.循序性 (程式重最上方執行到最下方return=0; 為止)
2.重複性3種 (while、do/while、for)
3.選擇性3種(if、if/else、switch)
模組化:在開發大型程式中,會分作為多個模組(module),1個模組中是為
許多支程式所構成,例如:一家大公司中的一個部門,"他的功用"

popowei iT邦新手 3 級 ‧ 2009-08-23 00:56:08 檢舉

感謝你改正我的觀念^^

13
laiis
iT邦新手 5 級 ‧ 2009-08-21 19:50:50

2.原始檔.目的檔.執行檔有何不同?
原始檔︰未編譯者﹐如 file.c
目的檔︰經 Compiler 後未 link 的檔 ﹐如 file.o
執行檔︰經 Compiler 且 linker 後的可執行檔﹐如 file.exe

我應該做何設定才能看到目的檔?
如 linux 下使用 g++ 時, 鍵入︰ g++ -c file.cpp 即可得到 file.o 檔

3.低.高階語言差異比較?
低階︰如 機器語言﹐組合語言﹐近似電腦的角度去思考,很難直覺的看出來在幹什麼,但執行的速度較快
高階︰如 c/c++ , java, perl , cobol blahblahblah... 通常用近以英語的語法寫成,相對低階語言,執行速度較慢

7.如 #include <stdio.h> 或 #include <iostream>

  1. 如 int main(void){ return 0;} 不需要引數

10.某計算機概論(旗x ,x標)裡有云﹐有人為 basic 寫了 compiler 也有人為 c/c++ 寫直譯器

如有錯誤,請指教~

popowei iT邦新手 3 級 ‧ 2009-08-21 22:10:36 檢舉

2.所以我寫到一半還沒編譯的程式也算原始黨囉?
9.我根本不懂什麼較不需要引數= =
10.所以這樣有啥意義嗎?

ps.我的補充ok?

fillano iT邦超人 1 級 ‧ 2009-08-23 00:57:09 檢舉
  1. 那當然...
  2. 不像java,c的main可以選擇是否傳入參數以及是否返回值。你在console下執行程式,例如dir /ad,這個/ad就是傳給程式的參數,這個參數c的runtime library會接收並處理,然後呼叫main並且傳給它,當然如果你寫main(void)就不會傳了。
  3. 我玩過Apple Basic,它就是個直譯器,在console中輸入的每一行都會經過直譯。後來像VB就可以編譯成兩種執行檔,一種裡面是P-Code,必須透過VB的Runtime解譯執行,但也可以輸出成Native執行檔。意義喔?廠商這樣做我想當然有商業考量跟技術考量。至於C/C++直譯器,恐怕是基於興趣或是教育考量比較多吧?

我要發表回答

立即登入回答