Использование имен функций в качестве указателей на функции
Обоснованный документ 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