小编Jus*_*tin的帖子

如果你只有一个标识符,#define会怎么做

通常#define将用于定义常量或宏.但是,以下列方式使用#define是有效的代码.

#define MAX // does this do anything?
#define MAX 10 // I know how to treat this.
Run Code Online (Sandbox Code Playgroud)

因此,如果我#define MAX 10,我知道我的预处理器用10替换MAX的所有实例.如果某人自己使用#define MAX但没有后续替换值,则它是有效的.这实际上做了什么吗?

我的理由是我在c ++中为c编写编译器并且需要处理预处理器指令但是我无法确定在发生这种情况时是否需要有任何功能,或者我只是忽略了这一次我的预处理完成了.

我的第一直觉是,这将在我的符号表中创建一个没有名为MAX的值的符号,但同样可能它什么都不做.

作为一个问题的补充,这是一种我知道的糟糕形式,但我真的很好奇.实际代码中是否存在使用此类内容的情况?

谢谢,宾克斯

c++ compiler-construction c-preprocessor

3
推荐指数
2
解决办法
683
查看次数

麻烦在对象列表上使用迭代器

所以我有一个名为symbol的类,它由4个字符串组成,这些字符串都是公共的.我创建了这些列表,我想在此列表中查看.这就是我到目前为止所拥有的.我查找了迭代器方法,它说它支持+运算符,但是我得到了一个错误.

    bool parser::parse(list<symbol> myList){
    //Will read tokens by type to make sure that they pass the parse
    std::list<symbol>::const_iterator lookAhead = myList.begin();
    if ((lookAhead + 1) != myList.end)
        lookAhead++;
    for (std::list<symbol>::const_iterator it = myList.begin(); it != myList.end(); ++it){
        if (it->type == "") {

        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

尝试向lookAhead添加1时出错.为列表创建前瞻的有哪些好方法?

谢谢,宾克斯

c++ iterator list

0
推荐指数
1
解决办法
43
查看次数