1

オンとオフのマクロを使用すると問題が発生するのはなぜですか。私は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 に答える