1. 程式人生 > >C/C++重複定義問題的由來和解決方法

C/C++重複定義問題的由來和解決方法

#include 相當於把.h檔案的內容原樣放到.C檔案相應的#include位置,
#define只在定義它的c檔案中起作用
多個c檔案可以使用#define定義相同名稱的巨集,
但是,多個C檔案定義相同名稱的全域性變數的話,就會出問題了,全域性變數在整個工程中起作用;也就是說:
a.c中定義了全域性變數 int memory; 
b.c中就不能定義全域性變數 int memory;
同樣,你下面的做法是不行的
---------------------------------
//ss.h
#ifndef comand
#define comand 1 
 int memory;
#endif
--------------------------------
一般來講,.h檔案中只能宣告變數,而不要定義變數,如果多個c檔案公用一個變數的話,可以在其中一個c檔案中定義該變數int memory;,並在標頭檔案中使用extern int memory;宣告該變數。

----------------------------------------------------------------------------------------------
#ifndef __COMMON_H_
#define __COMMON_H_ 1
這樣寫只是為了避免同一個c檔案中多次引用同一個標頭檔案,
假設有個a.h檔案中,#include了common.h
如果c檔案同時#include "a.h" 和<common.h>的話,
#ifndef __COMMON_H_
#define __COMMON_H_ 1
就會起作用了
追問:
#ifndef comand
#define comand 1 
#define memory 19
#endif
那#define memory 19屬於定義還是宣告,定義和宣告到底應該怎麼區分呢??謝謝了
追答:
這是巨集定義,和普通變數定義是不同的。巨集定義不需要宣告,只在一個c檔案中起作用
一般來講,普通變數定義一般為資料型別+變數名,例如 int a; 
變數一般不需要宣告,如果多個c檔案想用一個變數的話,可以在其中一個c檔案中定義該變數,並在標頭檔案中宣告該變數。宣告形式為 extern 資料型別+變數名,例如extern int a.