ubuntu下編寫C語言程式

2020-10-02 17:00:11

目錄

一.gcc編譯C語言程式

二.makefile編譯C語言程式

三.編譯過程中遇到的問題

題目:編寫一個主程式檔案main1.c和一個子程式檔案sub1.c,有如下要求:子程式sub1.c包含一個算術運算函數float x2x(int a,int b),此函數功能為對兩個輸入整型引數做某個運算,將結果做浮點數返回;主程式main1.c定義並賦值兩整型變數,然後呼叫函數x2x,將x2x的返回結果printf出來。(1)請在ubuntu系統中用gcc命令列方式編譯主程式main1.c並執行;(2)請在windows系統下用你熟悉的編譯工具編譯主程式main1.c並執行;(3)在ubuntu系統下用makefile方式編譯主程式。

一.gcc編譯c語言程式

1.用vim建立main1.c檔案:

在這裡插入圖片描述

2.進入vim編輯器然後輸入"i"進入編輯模式,main1.c主程式的程式碼內容如下:

3.主程式的程式碼完成後按Esc鍵返回普通模式,並在命令列中輸入「:wq"並回車,這樣能夠退出並儲存主程式的vim編輯介面

4.用vim建立sub1.c檔案:

在這裡插入圖片描述

5.進入vim編輯器然後輸入"i"進入編輯模式,sub1.c子程式的程式碼內容如下:

在這裡插入圖片描述

6.子程式的程式碼完成後按Esc鍵返回普通模式,並在命令列中輸入「:wq"並回車,這樣能夠退出並儲存子程式的vim編輯介面

7.使用gcc轉化為可執行檔案:

注意:gcc 編譯檔案的具體過程是:源文(.c)---->目標檔案(.o)---->可執行檔案
在這裡插入圖片描述

8.執行生成的main1可執行檔案:

在這裡插入圖片描述

9.執行結果如下所示:

在這裡插入圖片描述

10.windows下用IDE執行相同的C程式,結果如下所示:
在這裡插入圖片描述

二.makefile編譯C語言程式

1.用vim建立makefile檔案

在這裡插入圖片描述

2.進入vim編輯器然後輸入"i"進入編輯模式,makefile程式的程式碼內容如下:

在這裡插入圖片描述

3.同樣地,按Esc退出編輯模式,並在命令列處輸入":wq"再回車以儲存並退出vim編輯介面

4.輸入make:
在這裡插入圖片描述

5.然後會得到makefile的執行結果:

在這裡插入圖片描述

6.再輸入makefile中all的可執行檔案:

在這裡插入圖片描述

7.最後得到程式的執行結果:

在這裡插入圖片描述

三.編譯過程中遇到的問題

在這裡插入圖片描述
在這裡插入圖片描述
原因:分隔符要使用Tab鍵,而不是自行輸入空格

在這裡插入圖片描述

原因:命名的all檔案與現目錄中的檔案重名

解決方法:在makefile檔案中加入「.PHONY:all"

在這裡插入圖片描述

3在這裡插入圖片描述

原因:重複定義了某一函數,本例中顯示的是:「x2x"函數

通過蒐集一些資料,看到有如下解釋可以幫助我們很好地理解:

「一般在.h檔案中應以一個變數或函數宣告時,在其他檔案中只要包含了這個.h檔案,編譯的時候就會獨立被編譯器解釋,然後每個.c檔案會產生獨立的識別符號和符號表,所以上述程式碼在單獨編譯的時候不會報錯,語法是合法的。但是,最後在編譯器連結的時候,就會將工程中的所有符號整合在一起,由於檔案中有重複的變數或函數,於是就會出現重複定義的錯誤,系統給你的提示就是:multiple definiton of ‘xx’」

解決方法:在主程式中不再參照子程式,而是直接定義在子程式中被參照的方法即可

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-256wajHm-1601433065345)(C:\Users\嚴admin\Desktop\第一次作業\17.png)]示就是:multiple definiton of 'xx'”