#define宏定义内无法使用if-else

#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);