菜鳥級問題——課本上的原話,不懂ing


"對於較大的程序,一般不希望把所有的內容全放在一個文件中,
而是將它們分別放在若干源文件中,
再由若干源程序文件組成一個C程序。
這樣便於分別編寫,分別編譯,提高調試效率……
程序編譯時是以源程序文件為單位進行編譯的……"
這話如何理解?如何實現?
“若干源文件”分別編譯后是如何連接成一個程序的呢
不懂啊!!!!!求解釋,最好據一些簡單的小例子說明

17 个解决方案

#1


如果是C語言的話,源文件就是以.c結尾的文件。一個程序可能會有若干個自定義的函數,這些函數可以放在不同的源文件中,有一個主函數統一調用或自定義函數間也可以相互調用。這些自定義函數和程序中的全局變量可以在一個.h文件中統一定義,聲明。這個頭文件是自己寫的。
在相應的源文件中包含該頭文件,編譯的時候,統一編譯各個源文件,最終若編譯成功生成一個可執行文件。
這些源文件你可以使用一個腳本文件:makefile來統一管理。

#2


分別編譯,一次執行。

#3


從底層上理解更容易理解的吧,雖然是單獨編譯,但是和一次性編譯在內存中是一樣的,沒有什么區別的,個人理解

#4


源文件:后綴名為.c的文件(C語言)
對每個源文件分別編譯,生成目標文件。(編譯器)
連接所有的目標文件,生成最終文件(可能是exe文件,也可能是lib文件,..., 看鏈接選項)。(鏈接器)

#5


這個是編譯的基本概念,源代碼經過編譯、鏈接變成可執行文件……
這個東西很難理解嗎?
你為什么要include?直接把你include的文件copy到你的源代碼中就行了,一樣能執行……
這種程序設計中最最基本的概念,LZ最好還是自己去看看書,或者去網上學習一下的好……

#6


編譯生成obj文件,鏈接是把obj文件build成可執行文件。
編譯器可以把要編譯的文件作為參數 例如 g++ a.cpp  b.cpp  c.cpp
還可以在其中一個文件里(通常含有main的文件)把其他文件包含進來,只編譯含有main的這一個文件
其實包含就等於把被包含的文件的源程序復制進來,進行編譯

#7


結構化程序設計

#8


C/C++源程序的一次編譯針對翻譯單元進行。通常一個翻譯單元是編譯器(嚴格地說編譯器是一大堆程序的集合,這里是指編譯器驅動程序,compiler driver)的一個輸入文件,包括了其中的源代碼以及其中所有#include展開之后的代碼。翻譯單元被翻譯后得到目標文件(通常編譯器驅動程序需要調用預處理器和核心翻譯程序,可能會調用匯編器和優化器等)。目標文件可以不是由C/C++得到,也可以是匯編器或其它語言的翻譯程序得到。目標文件通過一定的規則(像引用的符號不能重復等)被鏈接程序(通常是一個鏈接器,也可能需要額外的輔助程序)鏈接為一個最終目標文件,例如可執行文件或靜態庫。


#9


找一個 ide,建一個工程,體會一下

#10


小朋友好可耐噥~~

#11


引用 10 樓 dock_wang 的回復:
小朋友好可耐噥~~

初學者 汗汗汗汗汗汗汗汗

#12


引用 9 樓 anyidan 的回復:
找一個 ide,建一個工程,體會一下

怎么建工程
那下面17個選項選哪個呢

#13


引用 5 樓 mesh4444 的回復:
這個是編譯的基本概念,源代碼經過編譯、鏈接變成可執行文件……
這個東西很難理解嗎?
你為什么要include?直接把你include的文件copy到你的源代碼中就行了,一樣能執行……
這種程序設計中最最基本的概念,LZ最好還是自己去看看書,或者去網上學習一下的好……

初學者就這樣
我不僅是一個初學者
還是一個自學者
沒人指導,學得困難ing

#14


這其實是:單元編譯模型
編譯單元:當一個c或cpp文件在編譯時,預處理器首先遞歸包含頭文件,形成一個含有所有 必要信息的單個源文件,這個源文件就是一個編譯單元。這個編譯單元會被編譯成為一個與cpp 文件名同名的目標文件(.o或是.obj) 。連接程序把不同編譯單元中產生的符號聯系起來,構成一個可執行程序。


如果寫的程序比較大時,如果不采用單元編譯,而在每當程序的源代碼修改時,最所有源代碼進行編譯,則非常的耗時(少則十幾分鍾,多則半個小時),等你以后工作了自然會明白

#15


main.c文件:

extern void print();
main()
{
    print();
    getchar();
}

print.c文件:

#include <stdio.h>
global
void print()
{
    printf("hello.world!");
}

然后分別編譯:
gcc -c main.c -o main.obj
gcc -c print.c -o print.obj

最后將得到的兩個目標文件進行鏈接:
gcc -o main main.obj print.obj

運行輸出hello.world!

#16


不好意思,上面print.c文件里多了個global

#17


引用 15 樓 cwt8805 的回復:
main.c文件:

extern void print();
main()
{
    print();
    getchar();
}

print.c文件:

#include <stdio.h>
global
void print()
{
    printf("hello.world!");
}

然后分別編譯:
gcc -c main.c -o……


呵呵,我總算過弄出來了
謝謝額




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com