2012-09-10 59 views
0

我有一個頭文件A.h,其中我定義了一個const int ID = 4;。我已將此頭文件包含在C文件A.cmain.c中。我使用了標頭警衛#ifndef A_H #define A_H等。但是,當我嘗試編譯代碼時,出現錯誤multiple definition of ID。 我在某處讀到,在大多數情況下,通過使用#pragma once可以避免這種情況,但我仍然收到錯誤消息。 我的問題是如何在C中定義變量?我是否需要將ID的定義移動到C文件,但是我必須在每個使用的文件中聲明它?或者在這種情況下使用extern的唯一方法?const int的多重定義

+0

http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c – cnicutar

回答

1

是的,使用extern是唯一的解決方案。或者包含警衛在同一個翻譯單元中防止多重包含,這是一個多重定義錯誤。

2

在C中,只允許每個對象具有單個定義。如果您有多個.o文件(編譯單元),則包含警衛人員和類似人員無助於此。他們每個人都有一個副本,這是不允許的。

如果不需要該對象的地址,你只在其常量值感興趣可以通過

enum { ID = 4 }; 

更換這定義int類型的命名值ID,你可以輕鬆地把在頭文件中。

0

當定義一個積分變量爲const,編譯器可以並經常將在值插頭當變量被使用,並且永遠不會爲它

當你的地址發生異常分配存儲標識符。在這種情況下,存儲大部分被分配,並且如果聲明位於頭文件中,將會發生多個定義。 在這種情況下,您別無選擇,只能使用extern