#define与{}和声明的混淆

时间:2016-04-19 08:02:25

标签: c++

我最近为学校考试准备了一个C ++程序。

#include<iostream.h>
#define convert(p,q) p+2*q

void main()
{
int a,b,result;
cin>>a>>b;
result=convert(a,b);
cout<<result;
}

这是正常的。

当我在{}中输入p + 2 * q时,它给出了错误: “函数main()中的表达式语法”

现在我在输出之前声明结果,就像这样:

int result = convert(a,b);

有效。为什么不呢?

1 个答案:

答案 0 :(得分:2)

如果您无法理解编译器抱怨的内容,请避免使用宏。当您放置额外的{}

时,这是扩展宏时代码的样子
result={a+2*b}

这就是声明在同一行上的样子

int result={a+2*b}

在C ++ 11标准之前,前者是语法错误。从C ++ 11开始,它是临时的copy-list-initialization(参见标记为(10)的语法)。

后者是aggregate initialization