Работая над проектом встроенных систем с использованием 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
Почему typedef для С++ не включает const
? Я где-то видел упоминание о том, что С++ не хранит целочисленные константные переменные в памяти выполнения, что, если это правда, будет означать, что const
нужно будет удалить из-за того, как регистры микроконтроллера отображаются в памяти, но я не могу найти что-либо еще, говорящее что С++ делает это (хотя мой поиск, по общему признанию, был довольно кратким). Не имея большого опыта работы с С++, я также подумал, что, возможно, С++ не допускает членов структуры const
, поскольку эти определения типов в основном используются в определениях типов структур для коллекций регистров, но это тоже не так.
#ifndef __cplusplus
положительным. - person Daniel Fischer   schedule 15.03.2013Reputation += LARGE_CONST; /* Ask some bike shed language question, that every idiot (including me) will have an opinion on. */
Однако, возможно, эта ссылка действительно полезна. embedded.com/electronics-blogs/programming-pointers/ 4025609/ Почему этот вопрос помечен ARM? - person artless noise   schedule 15.03.2013