1. 程式人生 > >c語言重複定義 multiple definition of `Recusion'

c語言重複定義 multiple definition of `Recusion'

c語言重複定義。。。。

我在標頭檔案(.h)中定義聲明瞭一個變數

int Recusion = 0;/*0,1*/

然後在兩個.cpp檔案中使用 a.cpp -------------------------- Recusion = 1; b.cpp --------------------------  if(Recusion && ...) { } 但是編譯卻有這個錯誤,怎麼回事? multiple definition of `Recusion'  難道是他們都包含標頭檔案,以致於多次定義,可是我的標頭檔案有做處理啊 #ifndef _INCLUDE_NTREG_H

#define _INCLUDE_NTREG_H 1

  1. 先有預處理程式 把include分別包含進 a.c 和 b.c檔案中(h檔案就沒用/丟棄了)
    其實這裡#ifdef根本沒被使用(利用)/沒有重複包含嘛 :)
  2. 編譯器彙編器分別單獨 編譯+彙編 a.c b.c檔案生成a.o 和b.o 到這裡沒有任何問題.(這裡分兩步:編譯/彙編,我暫時分不出這兩步,在這個問題中不是很重要)
  3. 聯結器 ld 連結 a.o 和b.o 這裡發現了重複定義的r變數.
以我現有的知識是這樣的過程.參照編譯原理之類的知識. extern(?)關鍵字可以解決這個問題.

你確實是定義了兩次

#ifndef _INCLUDE_NTREG_H #define _INCLUDE_NTREG_H  只能保證在一個原始檔中不會重複多次引用。 你現在是在兩個cpp檔案中,而且這兩個檔案要連結成一個可執行檔案,就會有兩處定義。 最佳實踐是標頭檔案不能有變數的定義,可以有宣告。