我正在MSVC 2012中编译以下内容
#define DOUB (i) ((i)+(i))
int _tmain(int argc, _TCHAR* argv[])
{
for (int i(0); i <= 10; i++)
std::cout << "twice" << i << "is" << DOUB(i) << '\n'; // 22
system("PAUSE");
return 0;
}
并且第22行出现以下错误:错误C2064:术语未评估为采用1个参数的函数
有人可以帮忙吗?
答案 0 :(得分:3)
预处理程序宏定义关注空格:不要在宏名称和类似函数的宏的括号之间留一个空格:
#define DOUB(i) ((i)+(i))
// ^^^^^^^
答案 1 :(得分:2)
你在DOUB
之后留下了一个空格。就编译器而言,您的代码读作:
std::cout << "twice" << i << "is" << (i) ((i)+(i))(i) << '\n';
你不应该责怪预处理器,只是避免它! (或删除空格)
为了完整性,您创建的内容称为文本替换宏,但您将不再使用宏了吗?