bitWrite函数无法编译

时间:2019-05-06 07:49:17

标签: c

我在µVisiom 5中定义了一个功能,如下所示:

 #define bitRead(value, bit)  (((value) >> (bit)) & 0x01)
 #define bitSet(value, bit)   ((value) |= (1UL << (bit)))
 #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
 #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))

在另一个函数中调用bitWrite函数时

void setled(uint8_t row, uint8_t col, uint8_t value) {
    bitWrite(buffer[col], row, value);

    //bitWrite(buffer[col], row, value);

    int n = col / 8;
    int c = col % 8;
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);  // pull the CS pin LOW    
    for (int i = 0; i < NumberOfMax7219; i++) {
        if (i == (NumberOfMax7219 - (n + 1))) {
            write_byte(((c + 1)));
            write_byte(buffer[col]);
        } else {
            write_byte(0);
            write_byte(0);
        }
    }
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);  // pull the CS pin LOW 
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);  // pull the CS pin HIGH 
} 

关于功能,我收到以下错误消息

bitWrite(buffer[col], row, value).

1. Error: expected ')'
2. Error: expected ';' after expression
3. Error: expected ')'
4. Error: expected ';' after expression

这里可能是什么错误?

1 个答案:

答案 0 :(得分:1)

bitWrite不是函数,它是预处理器宏。编写宏时必须非常小心,它们很容易出错,在大多数情况下应替换为内联函数。

宏有一个潜在的问题:在宏扩展中,参数bitvalue没有括在括号中,如果参数不是单个标记,则会导致潜在的运算符优先级问题。该宏应写为:

#define bitWrite(value, bit, bitvalue) ((bitvalue) ? bitSet(value, bit) : bitClear(value, bit))

但是,您的代码片段中的问题似乎在其他地方。错误消息以违规行bitWrite(buffer[col], row, value).上的副本开头,以句点(.)而不是;结尾,这与发布的代码片段相反。是错字吗?它将解释一些错误消息。