c 语言常用宏定义 模板
常用宏定义1、防止一个头文件被重复包含 typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */ //下面的不建议使用 typedef unsigned short word; /* Unsinged 16 bit value type. */ typedef unsigned long dword; /* Unsigned 32 bit value type. */ typedef unsigned char uint1; /* Unsigned 8 bit value type. */ typedef unsigned short uint2; /* Unsigned 16 bit value type. */ typedef unsigned long uint4; /* Unsigned 32 bit value type. */ typedef signed char int1; /* Signed 8 bit value type. */ typedef signed short int2; /* Signed 16 bit value type. */ typedef long int int4; /* Signed 32 bit value type. */ typedef signed long sint31; /* Signed 32 bit value */ typedef signed short sint15; /* Signed 16 bit value */ typedef signed char sint7; /* Signed 8 bit value */ 3、得到指定地址上的一个字节或字 #define MEM_W( x ) ( *( (word *) (x) ) ) 4、求最大值和最小值 #define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) ) 5、得到一个field在结构体(struct)中的偏移量 /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */ 6、得到一个结构体中field所占用的字节数 7、按照LSB格式把两个字节转化为一个Word 8、按照LSB格式把一个Word转化为两个字节 (ray)[0] = ((val) / 256); \ (ray)[1] = ((val) & 0xFF) 9、得到一个变量的地址(word宽度) #define W_PTR( var ) ( (word *) (void *) &(var) ) 10、得到一个字的高位和低位字节 #define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8)) 11、返回一个比X大的最接近的8的倍数 12、将一个字母转换为大写 13、判断字符是不是10进值的数字 14、判断字符是不是16进值的数字 ((c) >= 'A' && (c) <= 'F') ||\ ((c) >= 'a' && (c) <= 'f') ) 15、防止溢出的一个方法 16、返回数组元素的个数 17、返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n) ( (dword)(val) & (dword)((mod_by)-1) ) 18、对于IO空间映射在存储空间的结构,输入输出处理 #define inpw(port) (*((volatile word *) (port))) #define inpdw(port) (*((volatile dword *)(port))) #define outp(port, val) (*((volatile byte *) (port)) = ((byte) (val))) #define outpw(port, val) (*((volatile word *) (port)) = ((word) (val))) #define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val))) 如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。 __LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。 __DATE__ 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。 可以定义宏,例如: 20、宏定义防止错误使用小括号包含。 gcc 在碰到else前面的“;”时就认为if语句已经结束,因而后面的else不在if语句中。而采用do{} while(0)的定义,在任何情况下都没有问题。而改为 #difne DO(a,b) do{a+b;a++;}while(0) 的定义则在任何情况下都不会出错。 |
c 语言常用宏定义 模板相关推荐
- C语言常用宏定义(#define)使用方法
· 正 · 文 · 来 · 啦 · 前言 ------在上篇文章里面,我们分析了预处理的一个完整过程,这能够让我们理解一个写好的程序,在生成一个可执行文件,到底发生了什么,对我们在大型 ...
- C语言宏定义(常用宏定义)
C语言常用宏定义 常用宏定义 数值相关的宏定义 字符相关的宏定义 byte相关的宏定义 bit相关的宏定义 数组与结构体相关的宏定义 对齐的宏定义 常用宏定义 数值相关的宏定义 闰年的判断 ,年份可以 ...
- 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...
- C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...
- iOS - 常用宏定义
iOS中的常用宏定义 此篇博客为博主转载经典文章,非常感谢原创的优秀资源! 为方便常看和使用,在此我将原文中的宏定义在此以代码片形式展示出来,具体内容如下: #ifndef MacroDefiniti ...
- c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用
c语言用宏定义常量 As we know that, while declaring an array we need to pass maximum number of elements, for ...
- c语言中宏定义的字符替换#define M(x,y,z) x*y+z
C语言中宏定义的字符替换问题 例子: 在c语言中定义如下宏 #define M(x,y,z) x*y+z 给定如下程序 #include<stdio.h> #include<stdl ...
- iOS - 常用宏定义和PCH文件知识点整理
(一)PCH文件操作步骤演示: 第一步:图文所示: 第二步:图文所示: (二)常用宏定义整理: (1)常用Log日志宏(输出日志详细可定位某个类.某个函数.某一行) //=============== ...
- C 语言编程 — 宏定义与预处理器指令
目录 文章目录 目录 前文列表 宏 预处理器 预处理器指令 预处理器指令示例 预处理器指令运算符 宏定义 简单宏定义 带参数的宏定义 符号吞噬问题 使用 do{}while(0) 结构 预定义的宏 常 ...
最新文章
- python加号换行,Python字符串拼接六种方法介绍
- 查询磁盘的性能(iostat)
- NYOJ题目10505C?5S?
- fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法
- Boost:在向量中打印值
- python 获取指定文件夹里面的图片文件的信息
- 华为AR engine 应用开发学习教程
- windows 10下的kiosk模式
- extjs5(03--项目中文件的加载过程)
- matlab的开方算法_区域生长算法(附MATLAB代码实现)
- java家庭记账管理系统_基于ssh/jsp/java/asp.net/php的家庭记账管理系统
- opper、vivo手机微信小程序扫码后请求后台报400错误
- android崩溃日志 2016,常用获取Android崩溃日志的几种方法
- 三层交换机与路由器的区别
- keras h5—darknet weights模型相互转换
- 浅谈Attention机制
- 判断HTTP代理的高匿程度
- VSCode 居然是个娱乐软件?让你 high 到爆的几款插件
- Robocup2D入门笔记(1)——概述
- java 坦克世界源代码教程_译文教程:坦克世界游戏制作技术分享