#c #препроцессор
При просмотре алгоритма BlowFish нашел вот такую строчку: #define S(x,i) (SBoxes[i][x.w.byte##i]) Что означает ##?
Ответы
Ответ 1
Это соединение строк. В данном случае значение параметра макроса "приклеивается" к byte Допустим, макрос вызвали с параметрами var и 1, то S(var, 1) будет заменено препроцессором на (SBoxes[1][var.w.byte1]) а вызов S(var, str) на (SBoxes[str][var.w.bytestr]) и так далееОтвет 2
Это token pasting, слияние токенов на уровне препроцессора. Например, S(field,5) раскроется в (SBoxes[5][field.w.byte5]). Документация: MSDN GNU GCC cppreference
Комментариев нет:
Отправить комментарий