問題が発生しました。誰かが私に@
を取り除く方法を示すかもしれません。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)
@
を削除してください。残念ながら、私はどのようにわからない。私はいくつかのマニュアルを読みましたが、私は自分自身を表現する方法を知らない。あなたは、@を印刷したくない場合は
このような問題を解決する適切なツールは、デバッガを使用することですが、そうする前にStack Overflowで尋ねることはありません。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、** [小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**を読んでみてください。**少なくともあなたの問題を再現する[MCVE]を残してください。 (これはπάνταῥεῖ™によって提供される個人的なコメントです) –
文書を読んでください:mark + ctrlKはあなたのスペースバーを着用する必要はありません。明確にしてください。どこから '@ 'を削除する必要がありますか? –
あなたのコードの読者(今からあなた自身を含む)の読者が分かりやすくするために、コードで何をしたいかを書き出します。マクロの束の後ろに実際のコードを隠そうとしないでください – user3629249