在c ++中定义简单宏时出错

时间:2013-12-24 13:55:38

标签: c++ macros

我是在c ++中使用宏的新手。我写了一个短宏,我不知道它有什么问题。请帮忙。

#include <iostream>
using namespace std;

#define start B(
#define end )
#define B(x) cout<<x; 


int main (int argc, char *argv[])
{
    start 2014 end
}

1 个答案:

答案 0 :(得分:7)

C预处理器无法按预期方式工作。宏在一次传递中扩展,这意味着预处理器将“start”替换为“B(”和“end”with“)”并将结果提供给编译器。

由于没有第二个预处理过程,因此中间结果“B(2014)”不会被解释为预处理器宏。相反,C ++编译器会看到一个函数调用,这不是你想要的。