首页 > 其他分享 >支持任意参数个数的assert类

支持任意参数个数的assert类

时间:2023-07-02 21:55:50浏览次数:36  
标签:std ASSERT char const cout 个数 assert Assert 任意

#pragma once
#include <iostream> //std::cout
#include <stdlib.h> //abort

struct Assert
{
Assert& ASSERT_A;
Assert& ASSERT_B;

explicit Assert(const char* exp) : ASSERT_A(*this), ASSERT_B(*this)
{
std::cout << "Failed: " << exp << "\n";
}
~Assert()
{
abort();
}

Assert& print_context(const char* file, const char* function, const int line)
{
std::cout << "File: " << file << " Line: " << line << " Function: " << function << "\n";
std::cout << "Context Variables:\n";
return (*this);
}

template <typename type> const Assert& print_current_val(const char* name, type value)
{
std::cout << '\t' << name << " = " << value << "\n";
return (*this);
}
};

#define ASSERT_A(x) ASSERT_OP(x, B)
#define ASSERT_B(x) ASSERT_OP(x, A)
#define ASSERT_OP(x, next) ASSERT_A.print_current_val(#x, (x)).ASSERT_##next
#define ASSERT(expr) \
if (expr) \
{ \
} \
else \
Assert(#expr).print_context(__FILE__, __FUNCTION__, __LINE__).ASSERT_A

#define ASSERT_EQ(expr1, expr2) ASSERT(expr1 == expr2)(expr1)(expr2)
#define ASSERT_NE(expr1, expr2) ASSERT(expr1 != expr2)(expr1)(expr2)

#ifdef NDEBUG
#undef ASSERT
#define ASSERT(expr) \
if (true) \
{ \
} \
else \
Assert(#expr).print_context(__FILE__, __FUNCTION__, __LINE__).ASSERT_A
#endif

标签:std,ASSERT,char,const,cout,个数,assert,Assert,任意
From: https://www.cnblogs.com/suanniniu/p/17521499.html

相关文章

  • 611. 有效三角形的个数
    难度中等501给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例1:输入:nums=[2,2,3,4]输出:3解释:有效的组合是:2,3,4(使用第一个2)2,3,4(使用第二个2)2,2,3示例2:输入:nums=[4,2,3,4]输出:4 classSolu......
  • Scrapy保存数据到多个数据库
    Scrapy保存数据到多个数据库目标网站:中国福利彩票网双色球往期数据阳光开奖(cwl.gov.cn) http://www.cwl.gov.cn/ygkj/wqkjgg/代码classMongoPipeline:defopen_spider(self,spider):self.client=pymongo.MongoClient()self.ssq=self.client.bjsxt.ssq......
  • Python 满足列中任意两个数之和等于目标值,输出这两个数的值和所在列表的索引值
    给定一个列表为nums=[2,7,11,15],目标值target=9,找出列表中任意2数之和等于9的元素以及所在位置思路:双重遍历去一对一的比较判断1nums=[2,7,11,15,1,8,2]2target=93list_new=[]4deffind_num_indx():56foriinrange(len(nums)):......
  • 使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    作者:光脚丫思考 有关于数据库访问技术,通常所用到的研习数据库或许更多的要算是Northwind了。呵呵!至少,我自己是经常折腾这样的一个示例数据库。虽然如此,对这个数据库的了解,自我感觉还是相当的肤浅的。或者,只是自己认为没有必要把这个数据库吃的那么透彻。^_^我想恐怕正是因为有了这......
  • 使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    作者:光脚丫思考时间:8/30/20105:04:58PM 有关于数据库访问技术,通常所用到的研习数据库或许更多的要算是Northwind了。呵呵!至少,我自己是经常折腾这样的一个示例数据库。虽然如此,对这个数据库的了解,自我感觉还是相当的肤浅的。或者,只是自己认为没有必要把这个数据库吃的那么透彻。^......
  • 350. 两个数组的交集 II
    难度简单980给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 示例1:输入:nums1=[1,2,2,1],nums2=[2,2]......
  • assert断言与const修饰指针的妙用(模拟实现strcpy函数)
     assert断言目录assert断言的妙用:头文件:使用方法:const修饰指针的妙用主要用法const在*左边const在*右边断言和const修饰指针的应用模拟实现C语言strcpy函数  1、若字符串str1,str2有空指针怎么办?  2.str2改变了怎么办?assert断言的妙用:头文件:#include<assert.h>使用方法:当......
  • LCD12864单色屏任意位置显示文字图片功能,不在受限于8bit的分行
    /*取模软件image2Lcdv2.9液晶取模方式:扫描方式:数据水平,字节垂直输出灰度:单色最大宽度和高度:128*64字节内像素数据反序*/#defineLCD_REVERSE_FLAG0#defineLCD_DISPLAY_NORMAL0#defineLCD_DISPLAY_REVERSE1#defineLCD_BUFF_BYTE_MAX1024#defineSCREEN_WIDT......
  • 两个数交换值(不用定义新变量)
    公式:    a=a^b;    b=a^b;    a=a^b;假设a=甲,b=乙a=甲^乙   b=乙a=甲^乙   b=甲^乙^乙=甲^0=甲a=甲^乙^甲=乙^0=乙     b=甲交换成功 前提:a,b在内存里是两块不一样的地址(可以是一样的值)       比如,arr[i......
  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。"使用交叉验证算法和确定最佳隐含层节点个数的bp神经网络,可以通过编写注释清晰、效果清晰的Matlab程序来处理Excel格式的数据。这个方法可以帮助您快速上手,实现......