静态和动态断言调试

写程序的时候经常需要调试,下面给出静态和动态断言调试以及常用的内置宏。

内置宏:

__FILE__//输出文件名

__LINE__//所在行

__DATE__//日期

__TIME__//时间

__FUNCTION__//函数名

static_assert(
    constant-expression,
    string-literal
);

静态断言是在编译时候用的,因此第一参数的值必须在编译的时候就能确定,比如长量。如果第二参数为提示信息。如果第一个参数的表达式值为假则在编译的时候会出错,并给出

第二参数值。

void assert(
   int expression
);

动态断言在程序运行时候用的,如果表达式的结果为假,则会中断程序。

#include<iostream>
#include<assert.h>
using namespace std;

void  test(int mouth)
{
	assert(mouth>=1&&mouth<=12);//动态断言
	cout<<__FILE__<<endl;//输出文件名
	cout<<__LINE__<<endl;//所在行
	cout<<__DATE__<<endl;//日期
	cout<<__TIME__<<endl;//时间
	cout<<__FUNCTION__<<endl;//函数名
}
int main()
{
	int mouth=12;
	static_assert(sizeof(void *) == 4, "64-bit code generation is not supported.");//静态断言,如果是64 位系统则不支持
	test(mouth);
	cin.get();
	return 0;
}
时间: 2024-11-24 04:01:37

静态和动态断言调试的相关文章

windows库的创建和使用:静态库+动态库

windows库的创建和使用:静态库+动态库 一.静态库的创建和使用 1. 静态库创建 (1)首先创建工程test,测试代码如下: 1) test.h void test_print(); 2) test.cpp #include "test.h" #include <stdio.h> void test_print() { printf("test_print in static lib."); } 3)右击工程test:属性-->配置属性--&

Linux 静态库&amp;动态库调用

1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的.本文仅限于介绍linux下的库.2.库的种类linux下的库有两种:静态库和共享库(动态库).二者的不同点在于代码被载入的时刻不同.静态库的代码在编译过程中已经被载入可执行程序,因此体积较大.共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小.3.库存在

使用nginx+tomcat实现静态和动态页面的分离

博主最近在优化一个javaweb项目,该项目之前一直都是使用tomcat处理用户请求的,无论静态还是动态的东西,一律交给tomcat处理.tomcat主要是负责处理servlet的,静态的文件还是交给nginx处理,nginx对静态文件的处理比tomcat不是只快了一点,并且Nginx的使用对项目并发能力有很大的提升.下面主要记录下主要的配置过程: 实验环境:windows 实验工具:Nginx.tomcat windows下安装Nginx非常简单,去官网下载压缩包解压后并且双击解压目录下的ng

(一〇三)静态库(.a)的调试

上节介绍的方法,只能创建静态库而不能调试,因为直接创建静态库工程并非可执行文件. 本文介绍的方法创建的静态库断点能够在调试时起作用. 为了能够调试静态库,应该在一个可执行工程(例如Single View Application),然后再其内部再加入一个静态库,加入的方法如下图所示: 点击工程配置,中下部有一个+,点击后选择静态库然后创建. 创建后会发现工程中多了两个文件夹: 这就是新建的静态库. 这时候可以发现有两个工程可供选择: 第一个是可执行工程,第二个是静态库,如果要编译静态库,则选择第二

Delphi编写DLL(以及静态和动态方式调用)

Delphi编写DLL(以及静态和动态方式调用) 作者/cadenza7 什么是DLL? DLL是Dynamic Link Library(动态链接库)的缩写形式.DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源,多个应用程序可同时访问内存中单个DLL 副本的内容

关于静态与动态编译arm平台程序的比较

由于最近弄个console程序,调用了readline,ncurses库,这两个动态库加起来有四百多k,而程序其实很小,其他地方也没使用到这两个库 所以想静态编译看看console程序有多大. #arm-linux-gcc cli.c -o console libreadline.a  libncurses.a #ls -l total 1932 -rwxrwxr-x 1 root root   8427 Jul  7 15:19 cli -rw-r--r-- 1 root root   664

静态、动态库制作使用

本质 库是一种可执行代码的二进制格式,可以被载入内存中执行 库分静态库和动态库两种. 一.概念 静态函数库 库的名字一般是libxxx.a 函数库的链接是在编译时期完成 所有相关对象与牵涉的函数库被链接合成一个可执行文件 运行时,与函数库再无瓜葛 动态函数库 库的名字一般是libxxx.so 函数库的链接是在运行时期完成 运行时,在运行环境中必须有相应的库 二.优缺点 静态函数库缺点 文件较大,浪费空间 库或者程序一方改变都使得重新编译 动态函数库优点 文件较小,节省空间. 库具有公用性,内存中

静态、动态、粘滞端口安全

Cisco交换机上配置端口安全性的方法:静态安全MAC地址:静态MAC地址是使用switchport port-security mac-address mac-address接口配置命令手动配置的.以此方法配置的MAC地址存储在地址表中,并添加到交换机的运行配置中. 动态安全MAC地址:动态MAC地址是动态获取的,并且仅存储在地址表中.以此方式配置的MAC地址在交换机重新启动时将被移除. 粘滞安全MAC地址:可以将端口配置为动态获得MAC地址,然后将这些MAC地址保存到运行配置中. 粘滞安全M

【SSH系列】静态代理&amp;&amp;动态代理

从设计模式说起 代理模式是二十三中设计模式中的一种,代理模式就是指由一个代理主题来操作真实的主题,真实的主题执行具体的业务操作,而代理主题负责其她相关业务,简而言之,代理模式可以由以下三个部分组成: a.抽象角色:通过接口或抽象类声明真实角色实现的业务方法. b.代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作. c.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用.第一次接触代理模式的是在学习大话设计模式的时候,首先