題目:編寫一個主程式檔案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方式編譯主程式。
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程式,結果如下所示:
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’」
解決方法:在主程式中不再參照子程式,而是直接定義在子程式中被參照的方法即可