當前位置:首頁 » 編程軟體 » 編譯原理技巧

編譯原理技巧

發布時間: 2022-09-20 14:45:27

❶ 關於在linux下用gcc編譯頭文件

首先,確定你的頭文件都用宏隔開了,防止了重復定義。例如,在file.h 中的開頭就是
#ifndef __FILE__HEAD___
#define __FILE__HEAD___
//頭文件中的內容
#endif //__FILE__HEAD___
之後,
file.h中用到了list.h ,所以file.h中#include "list.h"//假設頭文件都在同一目錄下
list.h中用到了preapre.h 所以list.h中#include "prepare.h"
prepare.h中用到了node.h 所以prepare.h中#include "node.h"

在某些情況下,由於代碼組織等的問題,還是會出現編譯問題,這個就是代碼組織技巧的問題了,要根據具體代碼具體判斷了。
另外,准確的說頭文件只是在編譯的第一步,預處理的時候使用了,真正被「編」的應該是源文件,這個是編譯原理方面的問題了。

c語言為什麼能跨平台或者是如何跨平台的

c語言能跨平台是因為各個平台有相應的c編譯器,只要源代碼相同,編譯器編譯出來的二進制文件就會實現相同的功能,但是這些二進制文件本身是不一樣的。

exe就是2進制的,但不完全是原來程序的代碼,還包括了windows系統的一些代碼。

科普一下,C最早是出現在Unix下的,Windows那都是後話了,C出現的時候Windows還沒開發出來呢。

C有個比較特別的稱呼,叫中級語言,因為它有高級語言的特性又能跟底層硬體很好的交互所以才有這么個說法。DOS時代在C裡面嵌上一段匯編直接從並口讀個數上來那是很流行的,現在沒見誰在VC裡面這么干吧。Windows也不讓啊。想訪問硬體怎麼也得通過驅動。

C在多種平台下可以實現代碼級的共享,跨平台就需要重新編譯了。

但是,我也見過有的軟體是可以在多種平台上運行了,可能有什麼特別的技術,可以先識別一下操作系統,再運行相應的代碼。這個應該是在編譯的時候有特殊的技巧。

C編譯、連接器網上有現成的代碼,一般不是很專業的技術人員沒有去研究它。我一直把玩編譯原理的視為天人,有能力把編譯原理那本書看完的就很不容易了,再要能領會其中精要那就成才了,能把龍書虎書鯨書都搞明白的那就是一流專家了。

❸ 用gcc編譯器C語言程序的技巧

方法/步驟
1、編寫c代碼,並輸入以下代碼,生成文件hello.c
[root@wahoo
test]#
vim
hello.c
#include
<stdio.h>
#define
DISPLAY
"hello
c!"
int
main(void)
{
printf("%s\n",
DISPLAY
);
return
0;
}
ZZ(說明:ZZ當前文件進行快速保存操作)
2、預編譯(Preprocessing)
會對各種預處理指令(#include
#define
#ifdef
等#開始的代碼行)進行處理,刪除注釋和多餘的空白字元,生成一份新的代碼
[root@wahoo
test]#gcc
-E
hello.c
-o
hello.i
E
參數
通知gcc對目標文件進行預編譯,這里是對文件hello.c文件
o
參數
是對命令輸出結果進行導入操作,這里是把
gcc
-E
hello.c
操作結果輸出到文件hello.i(命名要自定義)中進行保存
這個命令執行完後我們目錄下多了一個文件hello.i,你可以查閱一下文件的內容。
3、編譯(Compilation)
對代碼進行語法、語義分析和錯誤判斷,生成匯編代碼文件
[root@wahoo
test]#gcc
-S
hello.i
-o
hello.s
S
參數
通知gcc對目標文件進行編譯,這里是對文件hello.i文件
通過這一步我們知道
C語言跟匯編的
關系,至於他們之前是如何進行轉換的,大家可以進行更深入的學習與探討。
此時目錄下多了一個hello.s文件,內容如圖
4、匯編(Assembly)
把匯編代碼轉換與計算機可認識的二進制文件,要知道計算機只認識0和1呢
[root@wahoo
test]#gcc
-c
hello.s
-o
hello.o
c
參數
通知gcc對目標文件執行指令轉換操作
此步驟我們得到文件hello.o
大家也同樣打開文件查看一下,這個文件裡面幾乎沒幾個字元大家能看懂,這就對了,但大家可以通過這種方法將其轉化為我們可讀的形式:
[root@wahoo
test]#readelf
-a
hello.o
5、鏈接(Linking/Build)
通俗的講就是把多個*.o文件合並成一個可執行文件,二進制指令文件
[root@wahoo
test]#gcc
hello.o
-o
hello
這里我們就得到了一個可以直接在系統下執行的文件
hello
我們也可以對這個文件進行readelf操作,也可以進行二進制指令轉匯編的操作
[root@wahoo
test]#objmp
-d
hello
6、程序運行
[root@wahoo
test]#./hello
hello
c!
7、總結:gcc
編譯c程序的主要過程包括
預編譯->編譯->匯編->連接
四個過程,每個過程都分別進行不同的處理,了解了這其中的一些原理,對c編程的理解大有益處

❹ 編譯原理和演算法與數據結構那門課比較重要

坦白的講都很重要,但這等於沒有回答你的問題,我理解你是想問學習的先後。其實演算法和數據結構是計算機編程技術的精髓,偏重理論和抽象,是重中之重;一旦你進入計算機編程領域時,編譯原理是你實現想法的重要工具,是知其然,而後知其所以然,讓你知道機器是如何實現你的想法的,方便你更好的利用機器,讓你的想法有可行性。

❺ 請問linux下,gcc編譯程序的過程(從讀取源文件到製作可執行程序中間所有過程,越詳細越好)

gcc -S *.c 預處理+反匯編

❻ 怎樣才能鍛煉出程序員的思維

要鍛煉出程序員的思維 首先要做到下面幾點
多家練習 才可熟能生巧
1、扎實的基礎

數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握它們,很難寫出高水平的程序。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本演算法的時候可能也會束手無策。因此多讀一些計算機基礎理論方面的書籍是非常有必要的。

2、豐富的想像力

不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想像力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。開闊的思維對程序員來說很重要。

3、最簡單的是最好的

這也許是所有科學都遵循的一條准則,復雜的質能轉換原理在愛因斯坦眼裡不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。

4、不鑽牛角尖

當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

5、對答案的渴求

人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。

6、多與別人交流

三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。

7、良好的編程風格

注意養成良好的習慣,代碼的縮進編排,變數的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加註釋了,如果注釋和代碼不一致,那就更加糟糕。

8、韌性和毅力

這也許是「高手」和一般程序員最大的區別。高手們並不是天才,他們是在無數個日日夜夜中磨煉出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然後再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。

❼ c語言為什麼能跨平台或是如何跨平台的

c語言能跨平台是因為各個平台有相應的c編譯器,只要源代碼相同,編譯器編譯出來的二進制文件就會實現相同的功能,但是這些二進制文件本身是不一樣的

exe就是2進制的,但不完全是原來程序的代碼,還包括了windows系統的一些代碼

科普一下,C最早是出現在Unix下的,Windows那都是後話了,C出現的時候Windows還沒開發出來呢。
C有個比較特別的稱呼,叫中級語言,因為它有高級語言的特性又能跟底層硬體很好的交互所以才有這么個說法。DOS時代在C裡面嵌上一段匯編直接從並口讀個數上來那是很流行的,現在沒見誰在VC裡面這么干吧。Windows也不讓啊。想訪問硬體怎麼也得通過驅動。
說遠了,C在多種平台下可以實現代碼級的共享,跨平台就需要重新編譯了。
但是,我也見過有的軟體是可以在多種平台上運行了,可能有什麼特別的技術,可以先識別一下操作系統,再運行相應的代碼。這個應該是在編譯的時候有特殊的技巧。
C編譯、連接器網上有現成的代碼,一般不是很專業的技術人員沒有去研究它。我一直把玩編譯原理的視為天人,有能力把編譯原理那本書看完的就很不容易了,再要能領會其中精要那就成才了,能把龍書虎書鯨書都搞明白的那就是一流專家了。

❽ 我是一個初學者,該如何開始學習編程

孔子說:「知之者不如好之者,好之者不如樂之者」。在學習編程之前,首先想想自己是不是適合學編程,自己是不是愛編程,自己對軟體開發這個行業有沒有很高的熱情。如果你只是聽說做軟體開發的人拿很多money,就想學編程,那麼我勸你不要學編程。軟體開發是一種艱苦的工作,沒有熱情是學不好的,如果你想發財,最好去搞房地產,去開醫院,因為只有這些行業是暴利行業,軟體開發不是暴利行業。如果你不確定自己是否適合從事軟體開發,你可以先試著學學編程。要學好編程,首先得有很好的英文基礎,如果英文不好,請馬上開始學。英文不好,絕對是你從事軟體開發的一個障礙。每天花一些時間來學英語,是一個很不錯的時間投資。其次是數學了。可能有很多人不以為然,但是我要說的是,一個合格的軟體工程師必須有很好的數學功底。高等數學,線性代數,概率論,數理統計,離散數學和數值分析都要好好學。數學決定了你在軟體這個行業里的深度。數學和英文是軟體開發的內功,請一定要注意。再學一門編程語言。c或者c++都可以,在學c語言和c++的時候,一定要把它們當做兩種語言來學。學習c語言,理解結構化程序設計思想,學習c++理解面向對象的思想。學編程語言的時候,多注意編程的細節。最好把書上的每一個習題都做一遍,然後上機調試一下,注意,在紙上寫不出正確的程序。最好多看一些英文原版書,如《The c programming language》,《The c++ programming language》,《c++ primer》,《thinking in c++》等。

學了一門編程語言後,就要學習《數據結構》了。《數據結構》也是編程的內功,一定要學好。要深刻理解圖,線性表和樹等等這些概念,還有一條,就是多編程。學數據結構就是學演算法。如果寫不出高效的演算法,絕對不是合格的程序員。當然,好的演算法可能讓你的程序運行效率提高幾十倍,上百倍。學了上面這些後,就可以學一些開發工具了,比如vc,vb等。千萬不要趕時髦,沒有學會c或者c++就急著學這些流行的東西。今天學.Net明天又看java,這樣是學不好編程的。 如果做到了上面的幾條,可以做一些項目練練手了。當然,做一些實際的項目開發就可以是自己掌握一些開發技巧和經驗.在這個階段還要好好學資料庫,操作系統,編譯原理,計算機體系結構等。這些東西都很重要,不懂這些,也不是一個合格的程序員。另外,在業余,還要學一些軟體工程方面的知識,看一些uml方面的書等. 最後,一個合格的程序員應該戒焦戒噪,善於學習,注意細節,多動手多動腦。

羅嗦了半天,送你一句話吧「編程的大道上荊棘叢生,這也是好事,常人望而卻步,只有意志堅強的人例外」。
希望可以幫到你,謝謝!

❾ 深入學習C語言的具體步驟

1、入門後多看代碼
在有一定基礎以後一定要多看別人的代碼。 注意代碼中的演算法和數據結構。 畢竟學C之後的關口就是演算法和數據結構。提到數據結構,指針是其中重要的一環,絕大多數的數據結構是建立在指針之上的,如鏈表、隊列、樹、圖等等,所以只有學好指針才能真正學好C。別的方面也要關注一下,諸如變數的命名、庫函數的用法等等。有些庫函數是經常用到的。對於這些函數的用法就要牢牢記住。
2、要自己動手
編程序是個實乾的活,光說不練不行。剛開始學的時候可以多練習書上的習題。 對於自己不明白的地方,自己編個小程序實驗一下是最好的方法,能給自己留下深刻的印象。 自己動手的過程中要不斷糾正自己不好的編程習慣和認識錯誤。有一定的基礎以後可以嘗試編一點小游戲,照著編作為練習。基礎很扎實的時候,可以編一些關於數據結構方面的東西。之後.....學匯編、硬體知識。
3、選擇一個好的編譯器
GCC或者VS都是一個號的選擇
4、關於養成良好的編程習慣

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:626
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:356
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:71
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:296
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:787
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:337
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:202
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:798
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:355
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:582