Загадочные ошибки компилятора

Я получаю сообщение об ошибке:

    left_hand:3:20: error: expected ']' before ';' token
     #define HAND_ROWS 5;
                        ^

в этом коде:

    #include <Keyboard.h>

    #define HAND_ROWS 5;
    #define HAND_COLS 6;
    #define ROW_PINS {9, 8, 7, 6, 5};
    #define COL_PINS {10, 16, 14, 15, 18, 19};
    #define LOOP_SPEED = 10;

    const char keymap[HAND_ROWS][HAND_COLS] = {{0xB1, '1', '2', '3', '4', '5'}, 
                                               {0xB3, 0x81, 'q', 'w', 'e', 'r'}, 
                                               {'6', 0x80, 'a', 's', 'd', 'f'}, 
                                               {'7', 'z', 'x', 'c', 'v', 'b'}, 
                                               {'h', 'j', 0x82, ' ', 'k', 'l'}};
    boolean pressedKeys;
    int keymapIndex;

Помогите, пожалуйста? Это не имеет смысла для меня... Если я попытаюсь использовать Keyboard.LEFT_SHIFT и эквивалентные константы для шестнадцатеричных кодов в раскладке клавиш, они сообщат мне «ожидаемый неквалифицированный идентификатор перед числовой константой». Что это вообще значит? Я так потерялся...

, 👍0

Обсуждение

В #define точка с запятой не нужна., @Dougie


1 ответ


Лучший ответ:

1

Вы не должны завершать #define с помощью ;. Точки с запятой предназначены для операторов C и C++. #define – это оператор препроцессора.

#define создает буквальную замену строки, поэтому при ее использовании вы получаете следующее:

const char keymap[5;][6;] = {...

что, конечно же, неверно.

,

Спасибо, что заметили мою ошибку новичка!, @Lowell Camp

Это не ошибка новичка... Я сам делал это время от времени... пальцы двигаются автоматически..., @Majenko

Думаю, это судьба программистов Java, которые переходят на C, или, по крайней мере, это касается меня., @Lowell Camp

@LowellCamp Или судьба людей, которые прыгают между тремя или четырьмя языками программирования одновременно - и программируют в предрассветные утренние часы;), @Majenko