2013-08-27 35 views
4

我是新來的代碼::塊和相當沒有經驗的C++以及。我知道有很多關鍵字,我不應該用於變量名稱,它們通常以不同的顏色顯示,就像它們在visualstudio中一樣。現在,當我將舊的vs項目中的一些代碼片段複製到新的code :: blocks項目時,我的一些變量名突然變成了彩色。例如,在這段代碼中,變量的開始和結束現在都以綠色顯示,我不明白爲什麼。確實代碼::塊保留名稱以外的C++關鍵字?

int begin = 0; 
int end = 4; 
int myarray[end]; 
for (int i = begin; i < end; i++) 
{ 
    myarray[i] = i; 
} 

在某些情況下,該代碼甚至不會編譯,我得到了奇怪的「衝突的聲明」的錯誤。我是否可以使用這些名稱,或者它們以某種方式保留在code :: blocks中?我看了一些書,但據我所知,他們沒有C++關鍵字。原因是,我現在在使用C++ 11嗎?我正在使用ide和mingw編譯器的v.12.11。感謝您的幫助。

+5

如果您使用的是C++ 11和'using namespace std;',begin和end實際上是函數。 http://en.cppreference.com/w/cpp/iterator/begin – risingDarkness

+0

我建議避免像開始,結束,索引等所有通用變量名稱。一個更具描述性的名稱將使代碼更清晰,你完全避免這一整個問題。 –

+0

那些不是關鍵字。它們是stantard庫容器成員函數的名稱,也是自C++ 11以來'std ::'名稱空間中的非成員函數的名稱。您的IDE必須經過培訓才能識別它們。您應該避免使用這些名稱,但使用它們並不一定是錯誤。 – juanchopanza

回答

6

我從你的困惑中瞭解到,你還沒有用過STL容器......如果你是C++的新手,但是這可能是一個好主意。無論如何,beginend在任何C++標準中都不是關鍵字,在C++ 11中都沒有。但它們的功能這兩個名字,返回一個迭代器對象,用來通過像這樣的STL容器走路:

vector<int> x = { 1, 2, 3, 4 }; 
vector<int>::iterator it; 

for (it = x.begin(); it != x.end(); ++it) 
{ 
    cout << *it << endl; 
} 

在C++日常實踐這個概念是如此普遍使用,這些名字得到列爲「用戶關鍵字「由CodeBlocks。用戶關鍵字通常是綠色的,因此可以與語言關鍵字區分開來。如果這讓你感到困擾,你可以自由地操作列表,甚至完全刪除它。只需從菜單欄中選擇「設置」 - >「編輯器」,然後單擊「語法高亮」選項卡。在那裏你可以做你喜歡的所有設置。獲取更多信息,請致電manual

image http://imageshack.us/a/img189/3956/m1qe.png

帶或不帶語法高亮不管,你should't但是出現編譯錯誤。原因可能是,您的項目包含標準庫標題,如#include <vector>,而您的代碼包含using namespace std;。你可能使用預編譯頭文件 - 在這種情況下也檢查它。

此外,我會建議你看看standard library containers並試試看。與普通數組相比,它們有幾個優點,但最好找出自己。但是,不要讓自己被這些迭代器被嚇倒 - 在C++ 11你也可以寫

vector<string> y = { "Foo", "Bar" }; 
for (auto& str : y) cout << str << endl; 

代替,這也將與你的陣列的工作

float z[] = { 0.5f, 1.5f, 2.5f, 3.5f }; 
for (auto& num : z) cout << num << endl; 
2

變量的開始和結束,現在顯示爲綠色,我不明白爲什麼

你可能有一個using namespace std;的地方,傾倒部分或全部標準庫的名稱到一個不合適的範圍。該庫包含(稱爲beginend)(稱爲許多其他名稱)的函數,並且您的語法高亮顯示可能會找到這些函數。

在某些情況下,該代碼甚至不會編譯

有時候,你的名字會隱藏庫名稱和代碼進行編譯。有時候,他們不會,所以你會得到一個錯誤。

無論如何,我可以使用這些名稱還是以某種方式保留?

是的。擺脫不適當的using指令,您可以隨意使用任何非保留名稱。唯一保留的名稱是關鍵字,particular patterns下劃線和大寫字母的名稱,以及std名稱空間中的名稱。

是我現在在用C++ 11的原因嗎?

是的。這些功能在2011年被添加到標準庫中。