#用{}和声明定义混淆

#define confusion with {} and declaration

本文关键字:定义 声明      更新时间:2023-10-16

我最近在学校考试中获得了一个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);

它有效。为什么,为什么不呢?

如果您无法理解编译器抱怨的内容,请避免使用宏。这就是当宏展开时,当您放置额外的{}时,代码的样子

result={a+2*b}

这就是同一行的声明

int result={a+2*b}

在C++11标准之前,前者是一个语法错误。由于C++11,它是临时的复制列表初始化(参见标记为(10)的语法)。

后者是聚合初始化。