断言用crtdbg.h的_ASSERT()。
#include <assert.h>
#include <crtdbg.h>
int main()
{
//__asm int 3; // CPU中断指令,软件中断,VS2022无法编译通过,MSVC取消了对于x64的C++内嵌汇编的支持,不要使用嵌入汇编的软件中断了,同时移植性和运行效率(CPU会被大量占用)也都不好。
__debugbreak(); // 可以使用__debugbreak()代替int 3,代码断点。
// 0xCC是中断指令int 3的机器码,两个0xCC(0xCCCC)就是一个烫字,会中断程序,Debug模式下未初始化的栈内存全部填充0xCC。
// Debug模式下未初始化的堆内存全部填充0xCD,对应屯字。
// Release模式下,栈和堆的内存不会进行填充操作,为了提高运行效率。
// crtdbg.h,C运行时库断言
_ASSERTE(0); // 显示行数和宏中语句
_ASSERT(0); // 只显示行数(推荐使用)
// assert.h,ANSI C 断言
assert(0); // 只停在报错代码处(个人感觉一点都不友好:连行数都不显示,不推荐。不过,移植性好一些)
return 0;
}
参考:
《关于assert、_ASSERTE、_ASSERT的一些问题 》:
https://www.cnblogs.com/Ray-chen/archive/2011/12/06/2277688.html
《使用断言》:
https://www.cnblogs.com/flamepenguin/articles/2105705.html
《C/C++调试技巧-debugbreak》:
https://www.bilibili.com/read/cv1165694/
《C 语言代码出错为什么显示「烫烫烫」,而不是其它字?》:
https://wenku.baidu.com/view/4131651d084c2e3f5727a5e9856a561252d3210b.html