本文目錄一覽:
- 1、怎麼連接兩個C程序的源文件啊?
- 2、c語言 兩個源文件的數組傳遞
- 3、C語言,兩個源程序,其中一個源程序文件調用另一個文件中的函數。
- 4、C語言如何將兩個源程序文件連接在一起編譯
- 5、C語言的開始:源文件,頭文件
怎麼連接兩個C程序的源文件啊?
c和c++的多文件編程規則是有差別的。下面只描述c的(主要是語法要求不太一樣,體現在編譯層面)。
簡單來說,有兩個層面的問題:
1
編譯問題
2
鏈接問題
1
編譯問題:
就是你的代碼要能夠編譯通過,編譯主要是對語法的檢查。例如:
1
a文件用b文件里的函數問題:在c語言中,a文件用b文件的函數,預設不用做任何說明(預設就是全局函數,注意不能是static函數,當然建議寫上extern的引用說明)。
2
但是如果a文件要用b文件的結構體。那麼必須把結構體放到頭文件里,兩個源文件都去include。
不羅列了,簡單來說,代碼要複合c的語法要求。
2
鏈接問題:
多個源文件可以編譯成編譯單元(編譯做得事),並且把這些編譯單元鏈接到一起形成最終的可執行文件或動態/靜態庫。
註:編譯單元,.o文件。
舉例:有a.c和b.c
以gcc編譯來說:(不考慮其他編譯和鏈接情況)
gcc
-c
a.c
//生成a.o
gcc
-c
b.c
//生成b.o
gcc
-o
hello
a.o
b.o
//
a.c和b.c裡面一個必須有main函數。輸出hello可執行程序。
如果是在集成開發環境,例如vc、devc++、codebloker等。就在軟體相關工程屬性里勾選上或增加源文件就行。(工具屏蔽了編譯鏈接技術細節)
c語言 兩個源文件的數組傳遞
array2的類型不對
這個需要定義成指針
unsigned char *array2;
這樣就肯定可以了。
其實更簡單的是
在Bfile.c裡面直接
extern unsigned char array1[64];
然後使用array1就可以了
C語言,兩個源程序,其中一個源程序文件調用另一個文件中的函數。
下面文件假設叫b.c,編寫一個b.h,內容為:void enorder();
假設上面文件為a.c,前面加一句:#include “b.h”或不用b.h前面加句void enorder();也成
b.c中第1句改為:extern int a[10];
void enorder();在頭文件b.h中寫成extern void enorder();也成
C語言如何將兩個源程序文件連接在一起編譯
請使用預編譯指令 #include。
#include放在代碼文件頭,用於告訴編譯器,文件中包含的頭文件,屬於預處理文件的一部分 。
語法為:
#include iostream.h (這句是程序編譯時搜索系統目錄文件)
#include 「HName.h” (這句是程序編譯時搜索當前項目的文件)
C語言的開始:源文件,頭文件
任何C程序最終都是要寫在文件上面,通常分兩種,源文件和頭文件,不是每個程序都有頭文件,比如一些簡單小程序就沒有。
源文件根據慣例,通常擴展名為.C,但是能否用其他擴展名嗎?查了一些資料,得到的答案是:儘管標準並沒有制定文件的取名規則,但大多數環境都存在你必須遵守的文件名命令約定。
頭文件根據慣例,通常擴展名為.h。通常是一個源文件對應一個的頭文件,並且兩個文件名相同,只是擴展名不同。我一直有個疑惑,就是可以讓源文件和頭文件兩個文件名不同嗎?經過親自折騰一下,確是可以的。經過細想,原因如下:頭文件只是用於共享宏、變數、函數等的。而且#include的語義是把對應的文件包含進來,至於包含的文件是什麼名字並不重要,要不要和源文件名相同也不重要,如果非要一樣,反而限制了#include的能力。另外C99標準中有這樣關#include有這樣一句話:A #include directive shall identify a header or source file that can be processed by the implementation.也就是說指要編譯器支持的文件,#include指令應該都可以包含。一般編譯器的功能都挺強大,足夠滿足我們需求,至於遇到特殊情況的大佬,大佬也會自行解決。
聊到頭文件 那就有必要對#include指令進行說明:
#include指令常用格式如下:
#include , #include “fileName” #include token(這裡token一般指宏的名字)
如果在源文件#include包含有一個static變數或函數的定義的頭文件,那麼這個源文件也可以訪問這個static變數或函數。原因就是這個源文件把對應的文件包含進來,那這些static變數或函數就相當於在這個源文件中定義,當然源文件就可以訪問了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/187154.html