2015-08-22 5 views
0

Помню, что мне постоянно говорили, что препроцессор C не знает C. Он не знает о типах, не помнит объявленных символов и т. Д. Если это так, то как он может действовать по-разному в зависимости от типа его параметр?Не C11 _Generic противоречит «сущности» препроцессора С?

ответ

6

Функция _Generic не обрабатывается препроцессором. Это первичное выражение , которое обрабатывается с более высоким приоритетом, чем большинство других выражений.

+0

Итак, препроцессор игнорирует его, по существу? – einpoklum

+0

Да, в препроцессоре нет ничего особенного в '_Generic'. –

+0

@einpoklum примеры '_Generic' всегда встречаются внутри макросов, потому что в любом месте нет возможности использовать эту функцию (вы можете просто набрать нужный вам случай, а не печатать всю структуру' _Generic'); но, как всегда, макрос - это простая замена текста. –