#用{}和声明定义混淆
#define confusion with {} and declaration
我最近在学校考试中获得了一个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)的语法)。
后者是聚合初始化。
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- Visual Studio中的函数声明和函数定义问题
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 如何在标头中声明(或定义)函数的问题
- 程序顶部的声明与定义(最佳实践)
- 类的前向声明之后的类成员函数定义,在类声明之前
- 静态变量声明和定义
- C++ G++ 编译器 - 错误:隐式声明的定义
- C++:错误重定义和先前声明
- 类模板静态数据成员定义/声明/初始化
- 只有一个定义/声明时标头声明变量的多堆定义错误
- OpenCV - Ptr 语法和类定义/声明 - 混淆?
- 如何为非类型模板类的专用化定义声明之外的方法
- 我如何防止静态类成员变量需要两个定义/声明
- 默认定义声明的详细程度不完整
- C++:非成员函数的定义/声明的位置
- 将比较操作符的重载定义/声明为库中的非成员函数
- C++头重新定义/声明混合