Макросы - это просто замена текста, поэтому они могут расширяться практически до всего, что вам нужно.В этом случае макрос используется для раскрытия двух аргументов функции.Функция ожидает строку и количество символов в строке в качестве аргументов, и макрос SNS()
генерирует их.Так что
ft_display_fatal(SNS("File name missing.\n"), 2, 1)
расширяется до
ft_display_fatal(("File name missing.\n"),(sizeof("File name missing.\n")-1), 2, 1)
Это в основном полезно, только если параметр является строковым литералом: sizeof("string")
- это размер массива char
, включая завершающий нольбайт, и -1
вычитает этот байт, чтобы получить количество значащих символов в строке.Это аргумент len
для функции ft_display_fatal
(я не уверен, почему он не может просто использовать strlen()
, чтобы получить это сам по себе - я думаю, это оптимизация производительности).