为什么使用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;
}
答案 0 :(得分: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
答案 1 :(得分: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;););
很明显,;
是错误的。
答案 2 :(得分:2)
Ahey,:))
#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;
}
只需从宏定义中删除分号,一切都应该有效。
干杯, 学家