错误:宏“断言”传递了 2 个参数,但只需要 1 个
Posted
技术标签:
【中文标题】错误:宏“断言”传递了 2 个参数,但只需要 1 个【英文标题】:error: macro "assert" passed 2 arguments, but takes just 1 【发布时间】:2021-10-31 01:50:25 【问题描述】:vector<string> foo(vector<string> s) return s;
assert(foo(vector<string>"hello", "world") ==
vector<string>"hello", "world");
错误:宏“assert”传递了 2 个参数,但只需要 1 个
错误:未在此范围内声明“断言”
也许在 gcc 11.1.0 中定义断言
# define assert(expr) \
(static_cast <bool> (expr) \
? void (0) \
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
编译器标志是
-Wall -std=c++20
【问题讨论】:
【参考方案1】:预处理器只对 C++ 的语法有一个原始的理解,特别是它把任何没有括在括号中的逗号作为参数分隔符。 assert
调用中有两个逗号,括号中只有一个,所以宏认为它得到了两个参数,如下所示
foo(vector<string>"hello", "world") == vector<string>"hello"
"world");
将表达式括在括号中以防止这种情况发生。
// Note: Double parens
assert((foo(vector<string>"hello", "world") ==
vector<string>"hello", "world"));
【讨论】:
以上是关于错误:宏“断言”传递了 2 个参数,但只需要 1 个的主要内容,如果未能解决你的问题,请参考以下文章
宏 MOCK_METHOD 传递了 3 个参数,但 std::pair 仅出现 2 个错误
从 rexx 代码向 ispf 宏传递参数时出现无效长度错误