1

为什么使用 on 和 off 宏会产生问题。我是使用 c 宏的新手。宏声明是否正确或代码是否存在其他问题。请帮忙 ??

#include<stdio.h>
#include<stdint.h>

#define ONE 1;             //  OR BY   1 [ 0 0 0 0 0 0 0 1 ] TO insert 1 at LSB position             
#define TWO_FIVE_FOUR 254; // AND BY 254 [ 1 1 1 1 1 1 1 0 ] TO insert 0 at LSB position

#define on(x) (x|ONE)
#define off(x) (x & TWO_FIVE_FOUR)

int main()
{
    uint8_t a=53;

    printf("\nValue of byte a : %d",a );

    printf("\nValue of byte b : %d",on(a)); //Error

    printf("\nValue of byte c : %d",off(a)); //Error

    getchar();

    return 0;
}
4

3 回答 3

6

从宏定义中删除分号

#define ONE 1              //  OR BY   1 [ 0 0 0 0 0 0 0 1 ] TO insert 1 at LSB position             
#define TWO_FIVE_FOUR 254  // AND BY 254 [ 1 1 1 1 1 1 1 0 ] TO insert 0 at LSB position
于 2012-08-30T15:37:48.593 回答
3

-E在使用开关预处理宏后,您始终可以检查 gcc 如何查看您的代码:

gcc -E mycode.c

这是输出:

printf("\nValue of byte a : %d",a );

printf("\nValue of byte b : %d",(a|1;););

printf("\nValue of byte c : %d",(a & 254;););

很明显,;s 是错误的。

于 2012-08-30T15:41:30.833 回答
2

啊,:)

#define 是预处理器指令,而不是 C 语句

如果您包括 ; 最后,预处理器会将其粘贴在代码中间。

您编写的代码是这样翻译的:

int main()
{
    uint8_t a=53;

    printf("\nValue of byte a : %d",a );

    printf("\nValue of byte b : %d",(a|1;););

    printf("\nValue of byte c : %d",(a & 254;););

    getchar();

    return 0;
}

只需从宏定义中删除分号,就可以了。

干杯,J。

于 2012-08-30T15:43:37.580 回答