C語言中重複定義的問題

2021-06-22 22:40:26 字數 942 閱讀 5871

幾個基本知識:

1、標頭檔案:標頭檔案的作用在於編譯時,會在#include<*.h>位置處展開,所以如果有多個.c檔案include同乙個標頭檔案(很常見),如果標頭檔案編寫時不進行處理,出現重複定義是不可避免的。尤其是當乙個專案分成多個模組的時候。

2、一般,把函式、變數、結構體、類等放在.c或者.cpp檔案中,編譯生成.o、.dll等給其他檔案使用。

3、標頭檔案一般放函式、變數、類的宣告。

4、不允許被其他檔案使用的函式用static定義,否則預設為extern

5、一般不要在標頭檔案中定義變數、函式、類,否則容易產生重複定義。

6、要使用其他模組(檔案)定義的函式、變數等,直接包含其標頭檔案。

例#include

void print(void)sqlist;

#endif

2、在檔案f1.c中定義了乙個函式initlist對結構體進行初始化操作

#include

#include

void initlist(sqlist *l){

l->length=0;

l->listsize=100;

3、在標頭檔案f1.h中對函式進行宣告

#ifndef fun1_h

#define fun1_h

void initlist(sqlist *l);

#endif

4、在檔案f2.c中有main函式定義了乙個結構體型別變數,並呼叫外部函式initlist進行初始化

#include

#include//為了使用結構體型別

#include//為了呼叫外部函式

void main(){

sqlist la;

initlist(&la);

printf("%d,%d\n",la.length,la.listsize);

5、正確編譯,執行,得到結果 0,100

C語言中矩陣定義問題

c語言在進行矩陣運算的時候可以按照下邊來定義 typedef struct matrix matrix 向量可以定義成下式 typedef struct vector vector 這樣可以包括所有維數的向量和矩陣。要在初始化的時候給矩陣和向量申請空間,不然為空會報錯,在申請空間時定義函式 void...

C語言中巨集定義的問題

巨集定義的基本用法是 替換 例如 define max 10 int a max c編輯器對巨集在預處理 預編譯 時展開,即替換 把a max 中的max 替換為 10。c預處理器是對巨集不做任何語法上的檢測,即 換 那麼這個 換 有時候就存在乙個運算優先順序的問題。例如 include defin...

c 語言中的巨集定義

巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...