Тип функции в C или переполнение стека

У меня простой вопрос:

Какой тип функции в C или C ++

Поскольку у нас могут быть указатели на функции в C или C ++, это означает, что функции должны иметь определенный тип, в противном случае проверка типов во время указателей на создание функций не имеет смысла.

Может кто-нибудь объяснить мне, я на правильном пути или нет?

Если я на правильном пути, как я могу найти тип функции?

3

Решение

Синтаксис для указателей на функции

Тип функции в C / C ++ включает в себя как return type и types of input parameters ,

Рассмотрим следующее объявление функции:

int function(char, float);

Указатель на эту функцию имеет следующий тип:

int (*funptr)(char, float);

Аналогично в целом:

returntype function (argtype1, argtype2, argtype3)

Соответствующий указатель на такую ​​функцию

returntype (*ptr) (atgtype1, atgtype2, atgtype3);

Есть много разных типов функций. Найти полезная ссылка на указатели функций здесь.

Кроме того, эта классификация основана на return type and argument types, функции также могут быть классифицированы на основе области их доступности. как глобальные функции, статические функции и т. д. Смотрите здесь для краткого вступления.

6

Другие решения

Это на самом деле function signature который должен соответствовать либо с declaration или с function pointer

Подпись функции содержит все как тип аргументов, без аргументов и типа возврата.

Прямо как переменные, вы не можете сказать, что конкретная функция имеет int тип или float или же char типа или так далее

Всегда помни это signature как я сказал выше.

2

Конечно, каждая функция имеет свои типы,

например, функция

double foo(bar& f, const const baz*)

имеет тип

function, that accepts reference to bar and constant pointer to baz and return double

Это может быть написано как

double ()(bar&, const baz*)

Указатель на переменную типов этой функции будет иметь тип (переменная, которая может хранить указатель на эту функцию)

будет иметь тип

double (*)(bar&, const baz*)

Или, если вы хотите, чтобы typedef указатель на функции этого типа, вы можете написать

typedef double (*func_ptr)(bar&, const baz*)

Снова,

func_ptr is a type of pointer to function, that accepts reference to bar and constant pointer to baz and return double

Одна вещь здесь — то, что указатель на функцию распадается на функцию, поэтому вы можете написать

func_ptr f = &foo;

а также

func_ptr g = foo;

И было бы то же самое.


Теперь представьте, что у вас есть

struct A
{
double goo(bar& f, const const baz*);
};

Сейчас goo имеет тип

function of struct A, that accepts reference to bar and constant pointer to baz and return double

Указатель на эту функцию будет иметь тип

double (A::*)(bar&, const baz*)

Обратите внимание, что это печатает отличается от типа свободной функции foo, Они не совместимы вообще.

Однако если goo мы static функция, тот факт, что он принадлежит struct A будет недостаточно (поскольку функция-член требует неявного this аргумент и static функции нет).

2

Каждая пара двух типов (A, B) имеет определенный тип функции A-> B. Если мы выберем A = int, B = float, то тип функции станет следующим:

float my_function(int a);
-2
По вопросам рекламы [email protected]