A. 我寫的一個程序編譯通過,但運行是報錯。 這是出了什麼問題
這是邏輯錯誤,就是說代碼在語法上沒有錯誤,但是在邏輯上有問題,因此沒辦法執行。
處理這種問題,可以通過調試,來看看哪一塊代碼邏輯上有問題(就是說沒有達到預期的效果)。
B. C語言程序編譯成功了,為什麼連接還出錯
1 編譯階段,執行的是對單個文件的轉換,從源代碼轉換成二進制文件。
2 鏈接階段,將每個源文件轉成的二進制文件,及相關的系統庫文件共同打包生成可執行文件。
3 從定義上可以看出,鏈接階段,出現錯誤有兩種可能:
1) 函數中引用了不存在的函數。
2) 編譯環境有問題,導致ld出錯。
C. java源程序編譯過後的文件是什麼文件
1.
java文件編譯過後會生成一個class文件,裡面是以二進制方式存放的代碼
2.
機器可以識別class文件中的內容,然後作出相應的操作。
D. 為什麼這個程序編譯通過了,運行起來會出錯呢
編譯通過只代表程序沒有語法錯誤,不代表程序會達到預期的效果
不過我把這程序改成c以後(就把include,namespace去掉,扮賣cout換成printf,cin換成getch),運行沒問題,結果正常
不知道你說得不對是不是因為輸出的是hellow,這是正確結果,因為數組的第一個位置是0,你p[5]的話等於是吧字元串的結束符換掉了,如果後面再有點別的什麼字的話,仍屬結果正常
彈出錯誤報告的原因可能是因為hellow後面的某些字元導致系統錯誤或其他不可預知的結果,你沒聽到pc喇叭響就已經很幸運了……
還有巫毒貓,你利利落常量和變數都是什麼了嗎就來這忽悠人家……你的意思這樣「常量」就不能改了啊,那程序里常量變數就永遠是對立的兩方面了,你告訴你我怎麼賦值,你的循環是寫成for(i=0;i<x;i++)嗎?照你的理論,0是常量,給i以後就不能改了,那還怎麼加啊,回去先把基礎知識惡補一下再來忽悠人……
-----------------------
程序的問題,我說了,沒有語法錯誤,編譯就能通過,而最後出錯的原因,只是在輸出字元串的時候遇到了導致錯誤的字元,這個字元可能導致c底層函數錯誤,或者向程序發送了錯誤的指示造成,你如果一定追問那個字元是什麼,對不起,我也不知道。另外要說的,你這題的分數確實沒有什麼可同情人家的價值,在說到這來回答問題的大概沒有專奔那個分來的吧,如果那樣的話,每天登陸5分,投票20分,灌水20分,這每天就45分,要是提個問再按期處理又10分,沒有到你這來蒙含缺粗這5分玩的必要,也比蒙你這5分快吧。
另外開始回答貓的問題:
我針對你的只是常量和變數的問題,"hello"寫在這是個字元串,當然你可以勉強把他當作常量,只要你每次把它寫全;在存儲的時候,就是內存空間;賦給一個字元串變數,就是變數的值,所以,這都題從頭到尾就沒有出現過修改常量的問題。常量只有在C中用#define(不知道拼對沒……)來定義,在C++中,可以用const(還是不知道拼得對不,寒自己一個……)來定義,這樣的才是常量。而這題說的都跟這兩個沒有關系,所以只能是上面提到過的內存空間。
正是回答你的問題,我當然認可修改一個指針指向的內存地址的信息,這是合法且經常會用到的,不知道你在用數組的時候有沒有過下面類似的應用:
int a[10];
*a=1;
*(a+1)=2;
這難道不是在修改一個指針指向的內容嗎?或者咱們再換個例子:
int *a;
a=malloc(20);//這里沒用保護,畢竟只是個例子
*a=1;
*(a+1)=2;
這次的例子更直接了吧,你能否認這是在修改指針指向的內存嗎?
修改指針的值和修改指針指向的內存當然是兩個不同的概念,我只是因為在上面沒有跟你討論指針問題,跟你討論常量的談鎮問題,所以才寫的那個例子,就變數和常量關系的問題,上面循環的那個例子足夠了
E. 一個C語言源程序經過編譯後就可以執行了 這句話對嗎
對的,C語言是先編譯後執行,一般只要不出錯誤,編譯完就可以執行力。有時候還要考慮是否跨平台。
F. C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(6)程序在編譯通過以後擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
G. C語言程序編譯後產生哪些類型的文件這些文件的作用是什麼
1、以GCC編譯器為例,可以分為四步。
第一步是預處理,包括語法檢查等工作。
gcc
-P
abc.c
第二步由源程序生產匯編語言代碼。
gcc
-S
abc.c
會生成abc.s文件,這個文件里就是匯編代碼。
第三步編譯器生成目標代碼,一個源文件生成一個目標代碼。
gcc
-c
abc.c
會生成abc.o
第四步連接器從目標代碼生成可執行文件。
gcc
abc.o
2、目標代碼包括機器碼和符號表(函數及變數名)。連接器的主要作用是通過符號表在庫文件和其他模塊中找到在目標代碼中引入或未定義的符號(函數及變數名),將幾個目標代碼合成可執行文件。
H. 用高級語言編寫的源程序,經編譯後產生的是
目標程序。
目標程序,又稱為「目的程序」,為源程序經編譯可直接被計算機運行的機如岩伏器碼集合,在計算機文件上以.obj作擴展名----由語言處理程序(匯編程序,編譯程序,解釋程序)將源程序處理(匯編,編譯,解釋)成與之等價的由機器碼構成的,計算機能夠直接運行的程序,該程序叫目標程序。
目標代碼盡管已經是機渣攜器指令,但是還不能運行,因為目標程序還沒有解決函數調用問題,需要將各個目標程序與庫函數連接,才能形成完整的可執行程序。
(8)程序在編譯通過以後擴展閱讀
計算機並不能直接地接受和執行用高級語言編寫的源程序,源程序在輸入計算機時,通過"翻譯程序"翻譯成機器語言形式的目標程序,計算機才能識別和執行。這種"翻譯"通常有兩種方式,即編譯方式和解釋方式。
編譯方式是指利用事先編好的一個稱為編譯程序的機器語言程序,作為系統軟體存放在計算機內,當用戶將高級語言編寫的源程序輸入計算機後,編譯程序便把源程序整個地翻譯成用機器棗扮語言表示的與之等價的目標程序。
然後計算機再執行該目標程序,以完成源程序要處理的運算並取得結果。解釋方式是指源程序進入計算機後,解釋程序邊掃描邊解釋,逐句輸入逐句翻譯。
計算機一句句執行,並不產生目標程序。如PASCAL、FORTRAN、COBOL等高級語言執行編譯方式;BASIC語言則以執行解釋方式為主;而PASCAL、C語言是能書寫編譯程序的高級程序設計語言。
I. java源程序編譯過後的文件是什麼文件
如果java項目的話編譯文件在項目目錄下的bin文件夾下如果是web項目編譯文件在web目錄/WEB-INF/classes/下面只有編譯後的代碼虛擬機才能執行
J. plc程序編譯後,編譯的結果會出現在
在輸出窗口。plc程序編譯後,編譯的結果會在輸出窗口,PLC編程是一種數字運算操作的電子系統,專為在工業環境下應用而設計。採用敬帆可編程序的存儲器,用來在其內部存儲執行邏輯運算、順序控制、定時、計數和算術運算等操作的指令,並通過數字式亮野雹、模擬式的輸入脊橘和輸出,控制各種類型的機械或生產過程。