code :: blocks保留除c ++关键字以外的保留名称吗?

时间:2013-08-27 13:50:36

标签: c++ c++11 codeblocks

我是code :: blocks的新手,并且在c ++中也很缺乏经验。我知道有很多关键字,我不应该用于变量名称,它们通常以不同的颜色显示,因为它们在visualstudio中。现在,当我将一些代码片段从旧的vs项目复制到一个新的代码:: blocks项目时,我的一些变量名称突然变色了。例如,在此代码中,变量begin和end现在以绿色显示,我不明白为什么。

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。谢谢你的帮助。

2 个答案:

答案 0 :(得分:7)

我从你的困惑中解脱出来,你还没有使用过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列为“用户关键字”。用户关键字通常为绿色,因此可以与语言关键字区分开来。如果这让您感到困扰,您可以自由操纵列表甚至完全删除它。只需选择“设置” - &gt;从菜单栏中选择“编辑器”,然后单击“语法突出显示”选项卡。在那里你可以做你喜欢的所有设置。获取manual以获取更多信息。

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

无论是否有语法高亮,您都不应该遇到编译错误。原因可能是,您的项目包含#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;

答案 1 :(得分:2)

  

变量begin和end现在以绿色显示,我不明白为什么

您可能在某处有using namespace std;,将部分或全部标准库的名称转储到不适合的范围内。该库包含(在许多其他名称中)称为beginend的函数,您的语法高亮显示器可能正在找到它们。

  

在某些情况下,此代码甚至不会编译

有时,您的名称将隐藏库名称,代码将编译。有时,他们不会,所以你会收到错误。

  

无论如何我可以使用这些名字,还是以某种方式保留?

是。摆脱不合适的using指令,您可以随意使用任何非保留名称。唯一保留的名称是关键字,带有particular patterns下划线和大写字母的名称,以及std命名空间中的名称。

  

原因是我现在正在使用c ++ 11吗?

是。这些功能在2011年被添加到标准库中。

相关问题