我是在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
}
答案 0 :(得分:7)
C预处理器无法按预期方式工作。宏在一次传递中扩展,这意味着预处理器将“start”替换为“B(”和“end”with“)”并将结果提供给编译器。
由于没有第二个预处理过程,因此中间结果“B(2014)”不会被解释为预处理器宏。相反,C ++编译器会看到一个函数调用,这不是你想要的。