私はこのように動作しますデバッグ機能マクロをしたい:の#define機能で文字列リテラルとしてシンボル名を使用してマクロ
int myVar = 5;
PRINTVAR(myVar); // macro
// which expands to something like...
print("myVar: ");
println(myVar);
基本的に、私は、文字列リテラルと同様に、変数などの識別子を使用したいです。
私はstdoutにたくさんの変数をダンプしたいときにちょっと病気になります。
私の愚かな試み、もちろん動作しません:
#define PRINT_VAR(x) Serial.print("x: "); Serial.println(x);
これは可能ですか?
マクロにセミコロンを埋め込むことには非常に注意する必要があります。あなたは確かにどこでもあなたが書いたものを使うことはできませんでした。通常、マクロ呼び出しの後にセミコロンがあるので、展開には2つのセミコロンが連続しています。 2番目のセミコロンは空文の終わりを示すため、文法エラーではありません。 'do {Serial.print(" x: ");}を使うことを検討してください。 Serial.println(x); } while(0) 'イディオムセミコロンを使用する必要がある場合。少なくとも1つの答えは、代わりにコンマ演算子を使用してセミコロンを注意深く避けることに注意してください。 –
@JonathanLefflerヒントをお願いします!私はコンマに気づいた、意味をなさない。 – aaaidan