【问题标题】:C++ Compilation error with std::cout and doublification macro带有 std::cout 和加倍宏的 C++ 编译错误
【发布时间】:2014-02-18 21:30:08
【问题描述】:

我正在 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 行出现以下错误:error C2064: term does not evaluate to a functiontaking 1 arguments

谁能帮忙?

【问题讨论】:

    标签: c++ macros c-preprocessor


    【解决方案1】:

    预处理器宏定义关心空格:不要在宏名称和类似函数的宏的括号之间留下空格:

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

    【讨论】:

      【解决方案2】:

      您在DOUB 后面留了一个空格。就您的编译器而言,您的代码如下所示:

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

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

      为了完整起见,您创建的称为文本替换宏,但您不会再使用宏了吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-12
        • 2017-05-13
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        相关资源
        最近更新 更多