Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Знак ## в языке Си

#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

Комментариев нет:

Отправить комментарий