Подтвердить что ты не робот

Выражения типа C11 - почему бы просто не добавить функцию перегрузки?

Я просто читал статью Википедии о C11, новую версию стандарта C, выпущенную в декабре 2011 года, и я увидел что одной из добавленных функций было "типовые выражения":

Типовые выражения с использованием ключевого слова _Generic. Например, следующий макрос cbrt (x) переводит на cbrtl (x), cbrt (x) или cbrtf (x)в зависимости от типа x:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)

Это выглядит довольно ужасно для меня - если они все равно изменят язык, почему бы просто не добавить перегрузку функций, как в С++?

4b9b3361

Ответ 1

C имеет одно пространство имен для внешних символов и применяет ODR (одно правило определения), так что два объекта extern с тем же именем в двух единицах перевода должны иметь одинаковое определение.

Хотя возможно создать C ABI, который поддерживает перегрузку, основной силой C является простота ABI. На почти всех платформах "ABI" является C ABI, и он играет определенную роль в исполнении независимо от исходного языка. Это будет потеряно, если символы должны включать информацию типа.

TGE (как используется библиотекой) - это просто ручная работа с названием mangling. Он (или будет делать, когда-то в возможно очень отдаленном будущем) работу, которую он должен выполнить, чтобы позволить объявлениям typedef управлять генерацией математических циклов с интенсивным математическим учетом. Людям, которые нуждаются в функциях языка С++, следует подключиться к С++.