[ASNI C] [常用宏定义] [define技巧]
1. 打印变量名及其值
#define Inquire(var, mode) fprintf(stdout, #var" = "#mode". \n", var)
// Usage
PSTR $PATH$ = "C:\\windows\\system32;.";
Inquire($PATH$, "%s");
// Output
// $PATH$ = "c:\windows\system32;.".
2.可变参宏的使用
void _Log(const char *format, ...);
#define Log(format, ...) _Log(format, ##__VA_ARGS__) //__VA_ARGS__是C99提供的特性可变宏参数,##用于当没有多余参数时删除format之后的','避免编译错误
#include <stdarg.h>
#include <stdio.h> static int i = ;
void _Log(const char *format, ...){
va_list list = ; // NULL
va_start(list, format);
{
fprintf(stdout, "==Log %d== ", ++i);
vfprintf(stdout, format, list);
fprintf(stdout, "\n");
}
va_end(list);
}
3.断言
void _Assert(const char *info, const char *func, int line);
#define Assert(x) if(!(x)) _Assert("断言失败!文件:" __FILE__ ",函数:%s,行:%d--\"" #x "\".", __FUNCTION__, __LINE__)
#include <stdio.h> void _Assert(const char *info, const char *func, int line){
fprintf(stderr, info, func, line);
abort();
}
[ASNI C] [常用宏定义] [define技巧]的更多相关文章
- C语言宏定义#define用法
		
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...
 - 宏定义#define整理
		
一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...
 - iOS - 常用宏定义和PCH文件知识点整理
		
(一)PCH文件操作步骤演示: 第一步:图文所示: 第二步:图文所示: (二)常用宏定义整理: (1)常用Log日志宏(输出日志详细可定位某个类.某个函数.某一行) //=============== ...
 - 宏定义#define和typedef的区别和典型范例题目辨析
		
宏定义#define pStr char* ,是直接把程序中出现pStr的地方替换成char* ,直接替换: typedef char * pStr; 是给char*定义一个别名叫做 pStr; ...
 - 【C++】内联函数(inline)和宏定义(# define)的优劣及其区别
		
一.宏定义:# define 1.为什么要使用宏? 因为调用宏比调用函数更有效率,函数的调用必须要将程序的执行顺序转移到函数所存放的内存地址中,将函数程序内容执行完后,再返回到执行该函数前的地方,这种 ...
 - iOS之常用宏定义
		
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
 - iOS 日常工作之常用宏定义大全
		
转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...
 - iOS常用宏 定义
		
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
 - iOS日常工作之常用宏定义大全
		
前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了怎么办?本人在工作中也是如此.所以在这里给大家分享一些常用的宏定义,喜欢的小伙伴可 ...
 
随机推荐
- 【Loj117】有源汇上下界最小流(网络流)
			
[Loj117]有源汇上下界最小流(网络流) 题面 Loj 题解 还是模板题. #include<iostream> #include<cstdio> #include< ...
 - sql 语句查所有父级
			
常见问题,给一个记录ID,查出它的所有父级,直到顶级 使用SMSS,sql server,找到一个办法. 思路是分两步,先循环找到所有父级的ID,再用IN查出所有父级 列说明 ID=PK Pare ...
 - 【bfs】Knight Moves
			
[题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...
 - HEOI2016解题报告
			
树 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记 ...
 - bzoj3427小P的牧场(斜率优化dp)
			
小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧 ...
 - centos7搭建ELK Cluster集群日志分析平台(二):Logstash
			
续 centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 . 安装Java 8 官方说明:需要安装Java ...
 - Linux记录
			
多语言环境镜像使用手册 vi和vim上查找字符串 vim 的安装及配置 Linux下的tar压缩解压缩命令详解 vim配置之——ctags与TagList的配置以及NERDTree && ...
 - QML-开发中遇到的错误收集
			
作者:狐狸家的鱼 关于一个前端来做qml界面开发,不会写cpp又只能大概看懂意思,遇到的很多问题都不知道怎么解决而急得拔头发. 遇到的问题都是我这种菜鸟渣渣才会导致的问题,写下解决过程方便以后查看. ...
 - iview tree 获取选中子节点的整条数据链
			
这样子获取到数据是,checked等于true的,获取不到他的父级,父级的父级 解决办法代码如下: //需要有一个唯一ID //==================================== ...
 - JS监听滚动条进度
			
HTML部分: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <s ...