在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数

在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数,第1张

概述我正在使用assert.h中的断言宏 我已经定义了lambda来执行断言检查. int val1 = 0;int val2 = 1;const auto check = [val1,val2]()-> bool{ return val1 < val2;};// no error for this callassert(check() && "Test is failed"); 我正在使用assert.h中的断言宏
我已经定义了lambda来执行断言检查.

int val1 = 0;int val2 = 1;const auto check = [val1,val2]()-> bool{    return val1 < val2;};// no error for this callassert(check() && "Test is Failed");// no error for this callassert([=]()-> bool       {           return val1 < val2;       }() && "Test is Failed");

06001

为什么我要来

too many arguments provIDed to function-like macro invocation

当我使用assert宏并在捕获列表中定义带有多个参数的lambda时,编译错误

解决方法 问题是捕获列表中的逗号.

预处理器对C语法的理解非常有限,它主要进行简单的文本替换.如果逗号不在匹配的内括号之间(当然不是字符串文字的一部分),则预处理器会将其视为宏调用的参数的分隔符.

所以预处理器认为你用两个参数调用assert [this和第一个逗号后面的其余东西,这会产生错误.

您可以使用一组额外的括号来修复此错误:

int i = -7,j = 7;assert(([i,j](){return i + j;}()));

对于标准爱好者:

The sequence of preprocessing tokens bounded by the outsIDe-most matching parentheses forms the List of
arguments for the function-like macro. The indivIDual arguments within the List are separated by comma
preprocessing tokens,but comma preprocessing tokens between matching inner parentheses do not separate
arguments. If there are sequences of preprocessing tokens within the List of arguments that would otherwise
act as preprocessing directives,155 the behavior is undefined.

N4140中的16.3 / 11,强调我的.

总结

以上是内存溢出为你收集整理的在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数全部内容,希望文章能够帮你解决在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1065539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存