#define EC_WRITE_U16(DATA, VAL) \
do { \
if( (uint16_t)(DATA) % 2 ==0 ) \
{ \
*((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
} \
else { \
* ((uint8_t*)(DATA)) = ((uint8_t)(VAL)); \
}\
} while (0)
如上所示宏定义,else里面的内容报错,无论是写什么都不行。
请问如何解决呢?
你是啥编译器啊
在VS2010下OK的啊
这种复杂的宏,写成内联函数就好了啊
需要包含一个头文件,不然uint16_t这些类型都不识别,如下:
//包含这个头文件
#include <sys/types.h>
#define EC_WRITE_U16(DATA, VAL) \
do { \
if( (uint16_t)(DATA) % 2 ==0 ) \
{ \
*((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
} \
else { \
* ((uint8_t*)(DATA)) = ((uint8_t)(VAL)); \
}\
} while (0);