2013-03-13 122 views
2

下面的代碼片斷是下完全有效++(至少被編譯):常量聲明 - 語言差異?

my_file.cxx:

static const int MY_CONST_ONE = 1; 
static const int MY_CONST_TWO = MY_CONST_ONE; 

在另一方面,完全相同的代碼編譯的C未能與所述錯誤消息(http://ideone.com/erBkm9):

my_file.c:2:1: error: initializer element is not constant 

my_file.c:

static const int MY_CONST_ONE = 1; 
static const int MY_CONST_TWO = MY_CONST_ONE; 

是什麼原因?它是編譯器特定的還是某些已知的C vs C++差異?

+0

您的編譯器已經完成了這項工作。發佈結果,所以我們不必再次完成這項工作。 – nvoigt 2013-03-13 16:04:36

+1

@AlokSave,這個問題比你鏈接的問題簡單得多,而且更容易理解。我建議保留它。 – 2013-03-13 16:07:00

+0

@MarkRansom:但它是重複的。標有重複的答案正是在這裏問及更多。 *更簡單,更容易*理解與它有什麼關係?如果可以的話,可以進行重複標記的反向標記,但我認爲它不會對其他問題的內容做任何公正的處理。 – 2013-03-13 16:09:41

回答

7

基本上,const C中的變量不被視爲編譯時常量。需要編譯時常量的地方可以這樣而不是const變量中獲得它們的值。

+0

謝謝!考慮到我得到的編譯錯誤,這是非常有意義的。 – klement 2013-03-13 16:05:45