現在、私はArduinoにC++コードを書いています。例では、私が表現C++のF(文字列)の意味は何ですか?
Serial.print(F("Disconnected from central:"));
を見つけることが、この文はシリアルに文字列を送信するために使用されていることは明らかだが、それは代わりに直接文字列を使用してのF(文字列)を使用していますなぜですか?
私はGoogleにそれを試みますが、結果はありません。もし誰かがそれを知っていれば、私は非常に感謝します。
現在、私はArduinoにC++コードを書いています。例では、私が表現C++のF(文字列)の意味は何ですか?
Serial.print(F("Disconnected from central:"));
を見つけることが、この文はシリアルに文字列を送信するために使用されていることは明らかだが、それは代わりに直接文字列を使用してのF(文字列)を使用していますなぜですか?
私はGoogleにそれを試みますが、結果はありません。もし誰かがそれを知っていれば、私は非常に感謝します。
このマクロはArduino固有であり、 "C++"ではありません。
RAMを節約するために、フラッシュメモリに文字列を配置します。
これは、プログラムの実行時に文字列を変更できないことを意味します。
一つの現在の定義は次のとおりです。
#define F(slit) (reinterpret_cast<const __FlashStringHelper *>(PSTR(slit)))
これはちょっとした話題ですが、デフォルトでは文字列リテラルをフラッシュメモリに入れていないのはなぜですか?デフォルトでRAMに入れることに利点がありますか? –
@IanAbbott私は[このページ](https://www.iar.com/support/tech-notes/compiler/strings-with-iccavr-2.x/)で議論していますが、 AVRプラットフォーム上の文字列。 – unwind
だから私は見る!ありがとうございました。 –
F()
は、IDE
の1.0
リリースで追加された最も強力な機能の1つです。私は、用語macro
とfunction
を混ぜ合わせています。 F()
は本当にそれはそれはflash memory
はなくRAM
でstrings
を格納するために使用するマクロ、あるWString.h
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
に住んでいる#define macro
あり、function
ではありません。
単一のパラメータを持つ 'F'または' F'マクロがあります。 – dasblinkenlight
https://www.baldengineer.com/arduino-f-macro.html – interjay