Atmel SAM3X8E を使用して組み込みシステム プロジェクトに取り組んでいるときに、いくつかの CMSIS ヘッダー ファイルに次のようなコードがあることに気付きました。
#ifndef __cplusplus
typedef volatile const uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#else
typedef volatile uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#endif
C++ の typedef に が含まれないのはなぜconst
ですか? C++ はランタイム メモリに整数の const 変数を格納しないという言及をどこかで見ました。これが真の場合、const
マイクロコントローラ レジスタがメモリ マップされる方法のために削除する必要があることを意味しますが、他にそれを言っているものを見つけることができないようです。 C++ はそれを行います (私の検索は確かにかなり簡単でしたが)。C++ の経験があまりないので、C++ ではconst
構造体メンバーが許可されていないのではないかと思いました。これらの typedef は主にレジスターのコレクションの構造体 typedef で使用されるためですが、そうではないようです。