Jak działa to makro c?

Dlaczego wykorzystanie problemów z tworzeniem i wyłączaniem makr. Jestem nowy w użyciu makr c. Czy deklaracja makra jest poprawna, czy jest jakiś inny problem z kodem. Proszę pomóż ??

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

questionAnswers(3)

yourAnswerToTheQuestion