C/C++重複定義問題的由來和解決方法
阿新 • • 發佈:2019-01-05
#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.