2017-06-16 1 views
0

Je suis sur le point de terminer mon cursus universitaire en programmation C. Je veux mieux à des opérations de bits (comme la création de masques) donc je vais aller lui:Masques (macros de bits)

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

Je suis encore aux premières étapes et l'apprentissage de la syntaxe au moment, je ne sais pas pourquoi le compilateur dit qu'il ya erreur: code de gravité description du projet fichier d'état de suppression de ligne erreur d'expression (active) F0109 précédente entre parenthèses de type fonction d'appel apparent doit avoir (pointeur-to) Project14

programme complet (oui, il est pour Syntax seulement):

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

Répondre

0

changement

NUM |= BIT_I_SET(I,TYPE) 

à

NUM |= BIT_I_SET(TYPE, I) 

Vous pouvez exécuter simplement l'étape de pré-processeur de votre compilateur, qui se dilatent les macros en utilisant la commande:

gcc -E file.c