掩码(位的宏)

时间:2017-06-16 09:02:41

标签: bit bit-masks

所以我即将在C编程中完成大学课程。 我想在位操作方面做得更好(例如创建蒙版),所以我会去看看它:

#define BIT_I_SET(TYPE,I) ((TYPE)(1) << (I))
#define SET_BIT(NUM,I,TYPE) \
        NUM |= BIT_I_SET(I,TYPE)

我现在还处于早期阶段并学习语法,我不知道编译器为什么会出现错误: 严重性代码描述项目文件行抑制状态 明显调用括号前面的错误(活动)E0109表达式必须具有(指针 - )函数类型Project14

完整的程序(是的,仅适用于synatx):

#include <stdio.h>
#include <stdlib.h>

#define SHIFT(I,TYPE) ((TYPE)(1) << (I))
#define NEGATIVE(TYPE) (~(TYPE)(0))
#define BIT_I_SET(TYPE,I) ((TYPE)(1) << (I))
#define BIT_I_CLEAR(I,TYPE) (~((TYPE)(1)<< (I)))
#define MSB_SET(TYPE) ((TYPE)(1) << (sizeof(TYPE)*8-1)
#define SET_BIT(NUM,I,TYPE) \
        NUM |= BIT_I_SET(I,TYPE)
void main()
{
    unsigned char i, j;
    int shift = 3;
    i = 0;
    j = 0;

    SET_BIT(j, 2, unsigned char);
    printf("%d\n",sizeof(j));
    printf("%d",i);
    system("pause>null");
}

1 个答案:

答案 0 :(得分:0)

更改

 NUM |= BIT_I_SET(I,TYPE)

NUM |= BIT_I_SET(TYPE, I)

您可以只运行编译器的预处理器阶段,从而扩展宏 使用命令:

gcc -E file.c