2016-08-21 7 views
-5

問題が発生しました。誰かが私に@を取り除く方法を示すかもしれません。Cネストされたマクロ

私はUCのためにCを書いています。私は怠惰です。マクロの簡単な問題を解決したいと思います。 LEDのスイッチを入れる。

は、私はそのような何かを行うに管理:

#include <stdio.h> 

#define BIT_STD_SET(PORT, BITNUM) ((PORT) |= (1<<(BITNUM))) 
#define BIT_STD_CLE(PORT, BITNUM) ((PORT) &= ~(1<<(BITNUM))) 
#define BIT_STD_TOG(PORT, BITNUM) ((PORT) ^= (1<<(BITNUM))) 

#define LEDPORT_0 C 
#define LEDPAD_0 3 /*Blau*/ 

#define LEDPORT_1 D 
#define LEDPAD_1 4 /*GelbWeis*/ 

#define PO(n) LEDPORT_##n 
#define POR(n) [email protected](n) 

#define PA(n) LEDPAD_##n 
#define PAD(n) PA(n) 

#define LEDAN(n) BIT_STD_SET(POR(n),PAD(n)) 


#define f(a,b) a##b 
#define g(a) #a 
#define h(a) g(a) 

int main() 
{ 
    printf("%s\n",h(LEDAN(0))); 
    printf("%s\n",h(LEDAN(1))); 
    printf("\n"); 
    printf("%s\n",h(LEDAN(1))); 
    printf("\n"); 
    printf("%s\n",h(POR(0))); 
    printf("%s\n",h(POR(1))); 
    printf("%s\n",h(f(0,1))); 
    printf("%s\n",g(f(0,1))); 
    return 0; 
} 
[email protected]:~/$ gcc ./mak.c 

をそして得た:

[email protected]:~/$ ./a.out 

回答:

(([email protected]) |= (1<<(3))) 
(([email protected]) |= (1<<(4))) 

(([email protected]) |= (1<<(4))) 

[email protected] 
[email protected] 
01 
f(0,1) 

@を削除してください。残念ながら、私はどのようにわからない。私はいくつかのマニュアルを読みましたが、私は自分自身を表現する方法を知らない。あなたは、@を印刷したくない場合は

+2

このような問題を解決する適切なツールは、デバッガを使用することですが、そうする前にStack Overflowで尋ねることはありません。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、** [小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**を読んでみてください。**少なくともあなたの問題を再現する[MCVE]を残してください。 (これはπάνταῥεῖ™によって提供される個人的なコメントです) –

+2

文書を読んでください:mark + ctrlKはあなたのスペースバーを着用する必要はありません。明確にしてください。どこから '@ 'を削除する必要がありますか? –

+1

あなたのコードの読者(今からあなた自身を含む)の読者が分かりやすくするために、コードで何をしたいかを書き出します。マクロの束の後ろに実際のコードを隠そうとしないでください – user3629249

答えて

0

、これを置き換えます。これで

#define POR(n) [email protected](n) 

を:私は助け

#define POR(n) PORT PO(n) 

希望を。

0

あなたはこれで、トークンを連結することができます

#define CATx(a,b) a##b 
#define CAT(a,b) CATx(a,b) 

は、その後、あなたが#define POR(n) CAT(PORT,PO(n))のようにそれを使用することができます。

関連する問題