Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/89: Рейтинг темы: голосов - 89, средняя оценка - 4.79
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Что такое имя функции?

27.07.2019, 16:04. Показов 18170. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажите пожалуйста что такое имя функции?


создаю указатель на функцию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void foo(void){
 
std::cout << "hi all! ";
}
 
 
int main(){
 
(*p)(void)=foo;   // вот если я присваиваю указателю на функцию  foo без &  , то есть 
 
(*p)(void)=&foo; // то значит имя функции  " foo" это или адрес или указатель.
 
 
return 0;
}
что такое имя функции?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2019, 16:04
Ответы с готовыми решениями:

При вводе имени сообщить, что есть такое имя
Хочу написать программу, при вводе имени(например Katy), должно вывестись что есть такое имя. Что не так? #include &lt;iostream&gt; ...

Что такое Функции в C++
Можете объяснить что такое функции в C++, только подробно. Я не понимаю как они работают и да объясните что такое функции прототипы!...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

45
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
27.07.2019, 22:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Значение типа T может быть преобразовано в значение типа «указатель на T».

каким образом?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
27.07.2019, 22:06
Цитата Сообщение от pcmax Посмотреть сообщение
каким образом?
https://www.youtube.com/watch?v=kW7KBl7zSE0
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 22:06
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
люди утверждают, что имя функции является указателем на функцию.

я не несу отсебятину. просто пытаюсь разобраться с вашей помощью
Для начала ты не можешь внятно поставить вопрос. Вопрос "что такое имя функции" на программерском форуме звучит настолько же абстрактно, как и вопрос "что такое хорошо и что такое плохо". В качестве итога и получил срач на много постов, который ушёл даже в область ассемблера. Не поленись внятно задать вопрос - сильно повысятся шансы того, что получишь нормальный ответ
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
27.07.2019, 22:08  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Для начала ты не можешь внятно поставить вопрос. Вопрос "что такое имя функции" на программерском форуме звучит настолько же абстрактно, как и вопрос "что такое хорошо и что такое плохо". В качестве итога и получил срач на много постов, который ушёл даже в область ассемблера. Не поленись внятно задать вопрос - сильно повысятся шансы того, что получишь нормальный ответ
______________

хорошо.
является ли имя функции адресом или указателем?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
27.07.2019, 22:11
Цитата Сообщение от pcmax Посмотреть сообщение
является ли имя функции адресом или указателем?
транслятор делает добро

Добавлено через 51 секунду
холиварчик раздуваешь
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 22:23
Цитата Сообщение от Evg Посмотреть сообщение
Не поленись внятно задать вопрос - сильно повысятся шансы того, что получишь нормальный ответ
Вы понимаете, что человеку сложно сформулировать вопрос просто потому что он недостаточно компетентен (не в обиду автору, мы все по-началу не особо компетентны, а я и сейчас себя шибко компетентным не считаю)? Это для вас «имя функции» звучит абстрактно, а для ТС — нет. Так что не стоит утверждать, что ТС поленился задать вопрос.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 22:29
Цитата Сообщение от pcmax Посмотреть сообщение
является ли имя функции адресом или указателем?
Если вопрос применителен к точке, подсвеченной стрелкой в этом коде

C
void foo (void);
void bar (void)
{
  foo;  // <-- является ли имя функции адресом или указателем?
}
то имя функции, поставленное в выражение, семантически является операцией взятия адреса на функцию. Т.е. такое выражение имеет тип (конкретно в данном примере) void(*)(void), который является указателем на функцию

Если имеется в виду что-то другое, то задай вопрос развёрнуто. А не так, чтобы из тебя клещами пришлось вытягивать
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
27.07.2019, 22:36
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от Evg Посмотреть сообщение
Т.е. такое выражение имеет тип (конкретно в данном примере) void(*)(void)
Нет, типом этого выражения в C++ будет void() (или void(void), как удобнее)
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <type_traits>
 
void foo();
 
 
int main()
{
    std::cout << std::is_same<decltype(foo), void(*)()>::value << std::endl; //false
    std::cout << std::is_same<decltype(foo), void()>::value << std::endl; //true
}
https://wandbox.org/permlink/A8yCgIUMU6q76qwp
3
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 22:42
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. такое выражение имеет тип (конкретно в данном примере) void(*)(void), который является указателем на функцию
В C это также будет void (void).

Цитата Сообщение от Evg Посмотреть сообщение
то имя функции, поставленное в выражение, семантически является операцией взятия адреса на функцию. Т.е. такое выражение имеет тип (конкретно в данном примере) void(*)(void), который является указателем на функцию
Это неверно. Взгляните на этот код (используются GCC-расширения):

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
void foo(void)
{
    puts("foo");
}
 
int main(void)
{
    typeof(foo) t = foo;
    t();
}
Он скомпилируется, только если мы заменим typeof(foo) на typeof(&foo).

В данном примере foo — это function designator expression.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 22:54
У decltype аргументом может быть либо entity, либо expression. Подозреваю, что в твоём случае "foo" рассматривалось как entity. Если бы "foo" как выражение имело тип "void(void)", то его нельзя было бы использовать в правой части присваивания указателя на функцию. Но это уже какие-то языковые тонкости, которые, честно говоря, я даже не знаю, как проверить. И запросто в Си++ тут может быть всё не так, как в Си

Если ТС вообще про это спрашивал

Добавлено через 2 минуты
Цитата Сообщение от Eanmos Посмотреть сообщение
Он скомпилируется, только если мы заменим typeof(foo) на typeof(&foo)
Здесь тоже самое. Внутри typeof слово "foo" может рассматриваться как entity и как expression. Я в том смысле, что хз, как определить, что именно
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 22:56
Цитата Сообщение от pcmax Посмотреть сообщение
является ли имя функции адресом или указателем?
Смотри. То, что ты называешь именем функции — это ее идентификатор. Далее.

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void foo(void)
{
    puts("foo");
}
 
int main(void)
{
    foo;
}
foo; — это statement. foo (без ; ) — это function designator expression. Далее.

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
void foo(void)
{
    puts("foo");
}
 
int main(void)
{
    foo();
}
Здесь function designator expression foo преобразуется в non-lvalue указатель на функцию, потому что используется в операторе вызова функции.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 22:57
Вообще правильным было бы взять и посмотреть, что в стандарте написано по этому поводу, но для этого нужен доброволец
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 22:59
Цитата Сообщение от Evg Посмотреть сообщение
Если бы "foo" как выражение имело тип "void(void)", то его нельзя было бы использовать в правой части присваивания указателя на функцию.
В правой части присваивание function designator foo преобразуется в non-lvalue указатель на эту функцию.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
27.07.2019, 23:01
Croessmah,
А каков use case у типов вроде void()?
Где это может быть полезным?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 23:04
Eanmos, это оно?

Code
ISO/IEC 9899:1999 (E)
 
6.3.2.1 Lvalues, arrays, and function designators
 
4 A function designator is an expression that has function type. Except when it is the
operand of the sizeof operator54) or the unary & operator, a function designator with
type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to
function returning type’’.
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 23:07
Evg, да.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.07.2019, 23:07
Цитата Сообщение от Croessmah Посмотреть сообщение
Нет, типом этого выражения
Судя по всему, есть две сущности - "function designator" и "выражение". Выражение как раз имеет тип указателя на функцию. А funcrion designator имеет тип функции. При этом "foo" является function designator'ом, который сразу же приводится к указателю на функцию. Или что-то типа того, если я правильно понял
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 23:16
Evg, почти. Function designator — это тоже выражение, только выражение функционального типа.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
27.07.2019, 23:21
Цитата Сообщение от Eanmos Посмотреть сообщение
Здесь function designator expression foo преобразуется в non-lvalue указатель на функцию, потому что используется в операторе вызова функции.
Если я правильно понимаю, то postfix-expression в выражении вызова может быть непосредственно типом функции, т.е. преобразования в указатель не требуется. Но это так, семечки.
The postfix expression shall have function type or function pointer type.
http://eel.is/c++draft/expr.call
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
27.07.2019, 23:29
Croessmah, видимо, в этом C и С++ отличаются:

The expression that denotes the called function100) shall have type pointer to function returning void or returning a complete object type other than an array type.

100) Most often, this is the result of converting an identifier that is a function designator.
Это из C11.

pcmax, ты нашел ответ на свой вопрос?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2019, 23:29

Что такое виртуальные функции?
Всем привет! Ребята, что такое виртуальная функция? Как пользоваться ими и для чего они нужны? Может кто объяснить?

Что такое обертка функции?
дана функция на входе получает 2 параметра имя и возраст. srting children(string ima, int age) Нужно написать обертку, для...

Что такое ссылки на функции?
Хай. Вопрос в заголовке. Можно, пожалуйста с примером. Спасибо.

Что такое прототип функции?
Зачем нужен прототип функции ведь она и без него прекрасно работает? Если можете объясните как чайнику в подробностях) заранее спасибо...

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru