使用std :: cout和doublification宏的C ++编译错误

时间:2014-02-18 21:30:09

标签: c++ macros c-preprocessor

我正在MSVC 2012中编译以下内容

#define DOUB (i) ((i)+(i))

int _tmain(int argc, _TCHAR* argv[])
{
    for (int i(0); i <= 10; i++)
        std::cout << "twice" << i << "is" << DOUB(i) << '\n'; // 22

    system("PAUSE");
    return 0;
}

并且第22行出现以下错误:错误C2064:术语未评估为采用1个参数的函数

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

预处理程序宏定义关注空格:不要在宏名称和类似函数的宏的括号之间留一个空格:

#define DOUB(i) ((i)+(i))
//      ^^^^^^^

答案 1 :(得分:2)

你在DOUB之后留下了一个空格。就编译器而言,您的代码读作:

std::cout << "twice" << i << "is" << (i) ((i)+(i))(i) << '\n';

你不应该责怪预处理器,只是避免它! (或删除空格)

为了完整性,您创建的内容称为文本替换宏,但您将不再使用宏了吗?