Если бы это был я, я бы написал это как # 3, но с символическими именами для индексов массива, чтобы улучшить читаемость: -
#define DEVICE_ADDRESS 2
#define REGISTER_ADDRESS 3
#define NUM_BYTES 4
if (cmd[NUM_BYTES] <= 0xFF) {
do_stuff(cmd[DEVICE_ADDRESS], cmd[REGISTER_ADDRESS], cmd[NUM_BYTES]);
}
Конечно, вы можете заменить макросы на константы, перечисления и т. Д. Причина, по которой мне нравится эта опция, заключается в том, что другие две опции требуют использования дополнительных локальных переменных. Компилятор может или не может оптимизировать их в зависимости от его реализации и выбранного вами уровня оптимизации, но они просто кажутся мне ненужным уровнем дополнительной косвенности.