#define EDB_REC (byte*)(void*)&

Я программирую на Arduino Due, используя расширенную библиотеку баз данных, и в примере обнаружил следующую строку.

EDB_Status result = db.updateRec(1, EDB_REC logEvent);

Я не понимаю часть EDB_REC logEvent. Что делает EDB_REC? (logEvent - это просто структура). Итак, я перешел к реализации EDB_REC и получил:

#define EDB_REC (byte*)(void*)&

что меня больше смущает, потому что я никогда не видел такого оператора #define.

Может кто-нибудь объяснить мне, как работают эти 2 строки кода? При поиске в Google я получаю только записи о том, как определять константы и простые функции с помощью #define.

Спасибо!


person Alexander Fandos Jahrsetz    schedule 13.09.2017    source источник


Ответы (1)


Помните, что макросы просто заменяются в исходниках как отдельный шаг перед тем, как синтаксический анализатор компилятора начнет анализировать код.

Это означает, что db.updateRec(1, EDB_REC logEvent); после раскрытия макроса будет рассматриваться синтаксическим анализатором компилятора как db.updateRec(1, (byte*)(void*)& logEvent);.

person Some programmer dude    schedule 13.09.2017
comment
Ха, это имеет смысл. Тем не менее, что будет делать часть '(byte*)(void*)&' в logEvent? - person Alexander Fandos Jahrsetz; 13.09.2017
comment
@AlexanderFandosJahrsetz & - это оператор адреса. С помощью &logEvent вы получаете указатель на переменную. (void*) привел этот указатель к общему нетипизированному указателю, а (byte*) затем привел его к указателю на byte. - person Some programmer dude; 13.09.2017
comment
Помните: это всегда СПРАВА НАЛЕВО. - person ; 13.09.2017