Protocol for avoiding pointers

It (using -1 as a special pin number value) is widespread. Speaking of Arduino : it is used in ESP32 (in ESP-IDF).

Also, replacing int with uint8_t to save space in a struct rarely works, because compilers often pad such short members to 4 or 2 bytes boundary