Что означает имя функции в C

Что делает компилятор, когда мы определяем функцию? И является ли имя функции указателем? Или, может быть, это что-то еще.

Хотел бы я знать что-нибудь об именах функций.

Это просто имя (символ) для компилятора и компоновщика. In не будет присутствовать в вашем исполняемом файле\

0___________ 14.02.2023 11:52

Это просто идентификатор. Всякий раз, когда он используется в большинстве выражений, он «распадается» до указателя на функцию, точно так же, как имя массива при использовании в большинстве выражений «распадается» до указателя на первый элемент.

Lundin 14.02.2023 12:00

Я думаю, это хороший вопрос. Мы всегда должны спрашивать себя, что представляют собой вещи, которые мы используем, и интересоваться, как они работают внутри.

Dúthomhas 14.02.2023 13:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что означает имя функции в C

Имя функции обозначает функцию.

Что делает компилятор, когда мы определяем функцию?

Компилятор запоминает имя функции и генерирует код для ее реализации. Он также запоминает информацию из объявления функции, такую ​​как тип возвращаемого значения и типы параметров, если использовалась форма-прототип.

И является ли имя функции указателем? Или, может быть, это что-то еще.

Имя функции обозначает функцию.

Когда имя функции используется в выражении, оно автоматически преобразуется в указатель на функцию, за несколькими исключениями, обсуждаемыми ниже. Кроме того, фактически единственное использование имени функции — это указатель на функцию. Из-за этого программист может думать об имени функции как об указателе, но на самом деле это не указатель.

Единственным исключением из автоматического преобразования является использование имени функции с sizeof. Однако использование sizeof для функции обычно является ошибкой (оно не определено стандартом C и может работать, только если реализация C определяет его как расширение), поэтому это исключение никогда не используется в обычной практике. Другое исключение — когда имя функции используется с унарным &, как в &sin. В данном случае мы явно берем адрес функции, которая выдает указатель на функцию, поэтому нет необходимости в автоматическом преобразовании в указатель на функцию.

Когда вы вызываете функцию, как в случае sin(x), «оператор вызова функции» ( … ) принимает указатель на функцию в качестве своего первого операнда. Таким образом, из-за автоматического преобразования sin(x) фактически является (&sin)(x), что говорит о вызове функции с адресом &sin и передаче ей аргумента x.

Тот факт, что оператор вызова функции принимает указатель на функцию, является причиной того, что мы можем использовать указатели для функций, как в double (*p)(double) = sin; printf("sin(.5) = %g.\n", p(.5));.

Как оператор вызова функции получает указатель на функцию? Можете ли вы рассказать мне что-нибудь об этом?

yuangsc 14.02.2023 16:35

Стоит отметить, что параметры функции функционального типа преобразуются в указатели на функции. Это int(int()) эквивалентно int(int(*)())

tstanisl 14.02.2023 18:21

Другие вопросы по теме