A. C語言 編譯、組件、執行
一般來說編譯過後就成了基本上能執行的2進制代碼。但是這些2進制代碼並不完善,一個程序往往需要調用不止一部分的代碼,所以需要把這些代碼全部整合起來才能執行。
即時你的程序看起來只有一個文件,但是編譯過後,多多少少裡面至少會調用到一些操作系統功能,和其它的一些設置,所以依然需要組建這個過程把這個程序和這些系統默認的代碼組建起來形成一個完成、單一的可執行文件。所以一般組建過程就包含了組建內部和外部代碼,一般來說內部代碼就是我說的系統預留的必要的一些代碼(例如怎麼具體完成把一些字元顯示在屏幕上呀這些功能),而外部代碼就是額外的調用自己寫得或者別人寫得其它程序功能(往往當你的程序調用了非C標准函數的時候)。
所以就算你的代碼可以編譯,但是可能因為組建並不成功(例如需要組建的代碼本身有bug,或者丟失,或者版本不匹配),你的程序依然可能無法正確運行。
B. c語言程序,預編譯的作用是什麼
預編譯又稱為預處理 , 是做些代碼文本的替換工作。
處理 # 開頭的指令 ,
比如拷貝 #include 包含的文件代碼,
#define 宏定義的替換 , 條件編譯等,
就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令,預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。
c 編譯系統在對程序進行通常的編譯之前,先進行預處理。 c 提供的預處理功能主要有以下三 種:
1)宏定義 #definemin(a,b)((a)>(b)?(b)::(a))
2 )文件包含 如:#include<stdio.h>
3 )條件編譯#ifndefGRAPHICS_H
#defineGRAPHICS_H
*****
#endif
#ifdefGRAPHICS_H
*****
#else
*****
#endif
C. 為什麼C語言頭文件中要用條件編譯
如果你說的是文件中避免重復包含的預處理指令,有兩個原因
a)重復編譯相同的內容,即使不會導致語法錯誤,對編譯器也是極大的開銷,在大工程中,絕對是不可容忍的,持續編譯集成的代價是很高的,能省必須省
b) 有很多語法元素是不可重復編譯的,例如類型定義。你僅僅考慮變數,是遠遠不夠的。實際中,變數在頭文件中的使用是非常少的,因為全局變數也是能避免就避免的
D. 計算機c語言 為什麼經過編譯就可以執行,沒有經過連接
C語言是通過編譯器與電腦進行交流。不用經過連接。
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言訂定了一套完整的國際標准語法,稱為ANSI C,作為C語言最初的標准。
E. C語言編譯器是用來做什麼的
1.
C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。
2.
C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由於C語言實現了對硬體的編程操作,因此C語言集高級語言和低級語言的功能於一體。既可用於系統軟體的開發,也適合於應用軟體的開發。此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言。
F. C語言為什麼要先編譯成匯編語言
C語言,具有可移植性,或者說同樣的代碼可以在不同cpu平台上運行得到同樣的結果
匯編語言,移植性差,一般針對某型cpu,每個類型的cpu都有自己的匯編語言
為保證C語言編制的通用演算法的可移植性,比如我們用C編寫了一套mp3解碼演算法程序,要在pc機上、手機上都能用,那麼我們就採用通用的C編譯器,將C語言程序編譯成指定CPU的匯編語言,再匯編成機器可執行程序。
另一個用途是程序優化問題,在C語言層次,由於是高級語言,不涉及底層硬體,那麼底層硬體的特性不能夠得到充分利用,在需要優化演算法的場合,我們需要將C語言演算法編譯生成匯編程序,然後修改需要優化的匯編程序達到目的。比如,你在手機上經常會遇到音頻解碼器,需要安裝,而且不同的cpu需要選擇不同的解碼器,這些解碼器應當就是在匯編層次上優化了演算法的可執行代碼,關鍵部分經過匯編級優化,不需要優化部分仍然使用C語言編譯的結果。
G. 小白求助,編譯是什麼,為什麼需要編譯
人與機器交流(即人讓計算機按照人的意願做事)依賴於語言
語言的層次是:自然語言->高級編程語言->匯編語言->機器碼
人最熟悉的肯定是自然語言(就是你平時說的話)。
而計算機的cpu只認識二進制的機器碼,機器碼指導計算機做什麼操作(如邏輯運算)。
高級編程語言跟自然語言的關系更近些,對人來說相當於自然語言的白痴版,如java中的對象與類的概念可能對應於現實世界的某種事物,如C語言中的函數可能對應了一個功能,比如列印文件,經過簡單的訓練,人也能大概的讀懂。
匯編語言和機器碼更接近些,每個匯編指令一般都會對應一條機器碼,而高級編程語言中的一個語句(如if else什麼的)可能會對應多條匯編指令,匯編指令一般就是算術運算(如add)、邏輯運算(如and)、數據傳送(如mov)、條件判斷、跳轉等,只能用這些簡單功能的匯編指令組合來完成一個復雜的功能。人看懂匯編就很吃力了,更別提用匯編來完成想要的功能,太吃力,這個過程還是交個編譯器比較好。
而機器碼對於一般的程序員來說,就是天書,也基本沒人願意去看。
自然語言最容易表述人們的要求,當用戶用自然語言表述了需要的功能後,從自然語言到高級語言的轉換過程由程序員來完成,而由高級編程語言到匯編、由匯編到機器碼的過程都由編譯器來完成,由編譯器完成的這個過程也就是編譯了。
高級編程語言的代碼經過編譯階段成為匯編代碼,匯編代碼經過匯編階段變成機器碼,機器碼文件經過鏈接階段變成可執行文件(.exe)。一般編譯是指的編譯階段和匯編階段的組合,編譯器的工作一般是編譯和鏈接。
這就是我的理解,希望你幫到你。
H. 突然想知道,為什麼有的語言需要編譯之後運行,而有的語言則不需要呢 C, ruby 請分析謝謝!
我們用的大部分程序設計語言都是高級語言,高級語言要執行,必須要先變成計算機能識別的匯編語言.將高級語言變成匯編語言的過程叫做翻譯,目前有兩種形式的翻譯方法,一種是編譯,一種是解釋.C就屬於編譯方式,執行前一定先編譯一次.而B語言就是解釋方式,解釋一條執行一條,所以執行先不需要編譯一下.
I. 為什麼要對C源程序進行編譯、鏈接
首先要說的是C語言屬於高級語言,不能直接被計算機識別而執行,所以需要一些操作來轉化。。一開始是編譯預處理,對宏,包含指令,編譯指令等進行處理,然後是詞法語法分析,將源代碼翻譯成中間代碼(一般是匯編),接著優化代碼,,然後將中間代碼翻譯成機器語言(目標文件),機器語言是計算機的基層語言,能被計算機直接識別。。接著鏈接目標文件,生成可以執行文件。。。大概就是這樣。。詳細的LZ可看這個總結。。http://bbs.zdnet.com.cn/thread-1614727-1-1.html