我最近为学校考试准备了一个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);
有效。为什么不呢?
答案 0 :(得分:2)
如果您无法理解编译器抱怨的内容,请避免使用宏。当您放置额外的{}
时,这是扩展宏时代码的样子result={a+2*b}
这就是声明在同一行上的样子
int result={a+2*b}
在C ++ 11标准之前,前者是语法错误。从C ++ 11开始,它是临时的copy-list-initialization(参见标记为(10)的语法)。