gcc
не может скомпилировать код ниже, в то время как clang
компилируется нормально. У меня нет контроля над макросом PORTB
, как в сторонней библиотеке (avr
).
Это ошибка gcc
? Как я могу обойти это в gcc
? В качестве обходного пути каким-то образом возможно создать макрос препроцессора, который извлекает числовое значение из PORTB?
Обратите внимание, что этот вопрос похож, но не идентичен моему предыдущему вопросу .
Он также отличается от этого вопроса, когда разработчик может гибко изменять rhs назначения, избегая, таким образом, reinterpret_cast
.
#include <iostream>
#include <cstdint>
#define PORTB (*(volatile uint8_t *)((0x05) + 0x20))
struct PortB {
static const uintptr_t port = reinterpret_cast<uintptr_t>(&PORTB);
};
int main() {
std::cout << PortB::port << "\n";
return 0;
}