«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему имена функций могут использоваться в качестве указателей на функции в C90?

Почему имена функций могут использоваться в качестве указателей на функции в C90?

Опубликовано 23 декабря 2024 г.
Просматривать:896

Why Can Function Names Be Used as Function Pointers in C90?

Использование имен функций в качестве указателей на функции

Обоснованный документ C90 дает представление о конструктивном выборе приравнивания имен функций к указателям на функции. Это удобство упрощает использование указателей на функции в определенных контекстах.

Объявления функций

Рассмотрим объявления:

int f();
int (*pf)();

Вызовы функций

Все следующие явные допустимые вызовы функций:

(&f)();
f();
(*f)();
(**f)();
(***f)();

pf();
(*pf)();
(**pf)();
(***pf)();

Первое выражение в каждой строке было рассмотрено ранее. Второй – традиционный. Последующие выражения подразумевают неявное преобразование обозначения функции в значение указателя в большинстве контекстов.

Обоснование дизайна

Комитет не увидел существенных недостатков в разрешении этих форм и рассмотрел объявив их вне закона как чрезмерные усилия. Таким образом, эквивалентность между обозначениями функций и указателями на функции обеспечивает удобство использования указателей.

Неявное преобразование

Еще одно интересное наблюдение — неявное преобразование типов функций в указатели при их использовании. как параметры, но не как возвращаемые типы:

typedef bool FunctionType(int);
void g(FunctionType); // Implicitly converts to void g(FunctionType *)
FunctionType h(); // Error
FunctionType *j(); // Returns a function pointer with the type bool(int)
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3