这几行作为C中的小型测试框架做了什么?

这几行作为C中的小型测试框架做了什么?,第1张

概述嗨,我正在阅读std :: optional here的实现,我在其单元测试文件中找到以下行. struct caller { template <class T> caller(T fun) { fun(); }};# define CAT2(X, Y) X ## Y# define CAT(X, Y) CAT2(X, Y)# define TEST(NAME) caller C 嗨,我正在阅读std :: optional here的实现,我在其单元测试文件中找到以下行.
struct caller {    template <class T> caller(T fun) { fun(); }};# define CAT2(X,Y) X ## Y# define CAT(X,Y) CAT2(X,Y)# define TEST(name) caller CAT(__VAR,__liNE__) = []

我真的不明白这些线是做什么的.调用者似乎是一个调用函数的模板,但它如何用作调用者CAT …?
X ## Y在这里是什么意思?稍后在文件中,用户使用TEST定义单元测试,但它们没有出现在任何可执行代码中(我的意思是它们至少不在main函数中调用),所以我甚至不确定编译的二进制文件是否实际运行了测试.你能解释一下这里发生了什么吗?谢谢!

编辑:非常确定在运行二进制文件时执行测试,但是如何实现?

解决方法 您可以在预处理后查看输出(-E表示gcc)…

这是我添加宏的用法的代码:

struct caller {    template <class T> caller(T fun) { fun(); }};# define CAT2(X,__liNE__) = []TEST(disengaged_ctor) { foo(); };

after preprocessing the last line turns to:

caller __VAR10 = []{ foo(); };

我对__VAR和未使用的name *感到有些困惑.但是,[] {foo();用于创建调用者的lambda是在调用者构造函数中调用的.

* =我想这个想法如下:假设你收到一条错误信息,说__VAR10中有错误,然后在第10行找到TEST(disengaged_ctor),即.失败测试的名称.

总结

以上是内存溢出为你收集整理的这几行作为C中的小型测试框架做了什么?全部内容,希望文章能够帮你解决这几行作为C中的小型测试框架做了什么?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1256089.html

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

发表评论

登录后才能评论

评论列表(0条)

保存