Сегодня увидел такой вот эпик. Скрин нормальный делать было очень не удобно, так что сори.
Мы попытаемся спалить ваш кампутир
Vlad2001_MFS
Это пять!
/A\
> Наиболее читаемо вот так
Это твоя привычка и стереотип. В объявлении есть две сущности: тип и название переменной. Тип пробел название переменной.
wat
В объявлении есть две сущности: decl-specifier-seq и init-declarator-list.
wat
> Тип пробел название переменной.
int(*variable)(int);
Куда пробел ставить?
beejah
> int(*variable)(int);
> Куда пробел ставить?
Конечно между типом и значением. У значения "разадресовать указатель variable и вызвать разадресованное как функцию с одним int аргументом" тип int.
ТО есть так:
int (*variable)(int);
:)
Dmitry_Milk
int*(*variable)(int*);
?
beejah
> Там нет никакого значения
Я тега "сарказм" не нашел, поэтому поставил смайлик.
Но вообще в каждой шутке есть доля шутки - "странность" объявления нетривиальных типов в С/C++ на этом форуме уже обсуждалась - эта странность ("обвешанность" имени переменной всякими спецификаторами то слева то справа) легко объясняентся, если рассматривать объявление переменной наоборот - как применение "операций" к имени переменной (разадресация, индексация, "вызов функции") в соответствии с приоритетами - и в результате мысленного "вычисления выражения" получается именно тот тип, что написан левее всего.
beejah
> int*(*variable)(int*);
В соответствии с вышенаписанным:
разадресуем указатель variable (указатель на функцию), получаем функцию, вызываем ее с одним аргументом int*, получаем указатель на int, разадресуем его - и в итоге получаем int, то есть так :
int *(*variable)(int *);
Из вышеприведенного "объяснения", кстати, становится понятным, почему есть скобки вокруг *variable - из-за приоритетов операций разадресации и вызова функции.
Dmitry_Milk
Про то и речь.
int* var - это изврат какой-то.
beejah
> int* var - это изврат какой-то
Тем не менее в простом случае этот изврат почему-то воспринимается естественнее.
Но если случай сложны - то приходится наоборот:
int *(*var1)(int *), *var2, var3[CONST];
Я отформатировался.