c中宏定义的一些应用积累

原创 2015年11月19日 12:50:00
1.数据拆分宏定义
#define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)    ) )
#define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) )

在通讯中经常需要把数据拆成字节的形式,有多种方法这里是其中一种比较好用的方法

大致的处理过程是 对变量 dwTemp 去地址,然后将其强制转化成char类型的指针  最后再取出指针所指向的内容,这样就完成了对数据的拆分工作

 能完成这种功能的还有种写法就是利用结构体,准确说是联合体示例如下

typedef union 
{
	uint16_t u16_vale;
	uint8_t bytes[2];
}u16_type_u;

int mian ()
{
	u16_type_u u16;
	u16.bytes[0] = 10;
	u16.bytes[1] = 1;
	printf ("%d \n",&u16.u16_value);
	return 0;
}

以上均可以完成数据的拆分工作.


2.充当内联函数使用

示例如下:

#define LED1(a)	if (a)	\
					GPIO_SetBits(GPIOB,GPIO_Pin_0);\
					else		\
					GPIO_ResetBits(GPIOB,GPIO_Pin_0)
关于内联函数,有如下示例大致可说明含义
inline int max (int i ,int j, int k)
{
    if (i<j)
	i = j;
    if  (i<k)
	i = k;
    return i;
}
内联函数的优势在于减少频繁的调用可节省资源

RC.c(参考匿名的)

#include "rc.h" #include "BSP.h" //#include "app/uart/uart1.h" //#include "app/imu/imu.h" //#include...
  • qq_37184747
  • qq_37184747
  • 2017年05月29日 12:45
  • 282

c中宏定义的一些应用积累

1.数据拆分宏定义 #define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) ) #define BYTE1(dwTemp) ( *(...
  • daben1994
  • daben1994
  • 2015年11月19日 12:50
  • 104

c中宏定义的特殊符号

在C/C++中,宏定义是由define完成的,define中有三个特殊的符号值得我们注意:1. #:在宏展开的时候会将#后面的参数替换成字符串,如:  #define p(exp) printf(#e...
  • ljx0305
  • ljx0305
  • 2010年04月07日 17:37
  • 2962

关于C语言中宏定义的高级运用

1、# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。 如: ...
  • u012905667
  • u012905667
  • 2014年06月01日 10:41
  • 1719

STM32 C++编程 003 USART(串口)类

使用 C++ 语言给 STM32 编写一个 Usart 类我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0注意: 想学习本套 STM32 C++编程 的...
  • github_35160620
  • github_35160620
  • 2016年09月06日 16:59
  • 14680

UART1.c(参考匿名的)

#include "Uart1.h" #include "UART2.h" #include "IMU.h" #include "stm32f10x.h" #include "MPU6050.h" #...
  • qq_37184747
  • qq_37184747
  • 2017年05月29日 12:46
  • 580

C语言中调试用到的宏定义

在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难。因此在程序中加入合理的打印信息,定位错误出现的文件名,函数名,行号等信息,能更高效的定位到问题的所在。      下面定义了宏...
  • wabil
  • wabil
  • 2017年06月15日 09:18
  • 276

C/C++常用宏定义,注意事项,宏中#和##的用法

总结下宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。 当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等。 下面列举一些成熟软...
  • anye3000
  • anye3000
  • 2011年08月10日 17:30
  • 4479

【编程笔记】2012 - 2016年

TCHAR strErrorCode[10] = {0}; sprintf(strErrorCode, "0x%04X", iErrorCode); 表示十六进制 例如0x1EF3 GetPriv...
  • VichelleForever
  • VichelleForever
  • 2015年03月26日 13:28
  • 832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c中宏定义的一些应用积累
举报原因:
原因补充:

(最多只允许输入30个字)