Ок, а как это должно выглядеть "нормально"?
Возьмём предпоследний пример, он самый извращенный
char (*(*x())[])()
х: функц. возвр. указ, на массив[] из указ, на функц. возвр. char
Могу предложить например вот такой синтаксис:
()->[]*()->char x;
Ровно в порядке "убывания".
Если представить, что (args)->type, это указатель на функцию, [n]type - это объявление массива, *type это указатель, то всё становится максимально понятно. Это я, не специалист по синтаксисам, придумал.
А в С ебаный ребус.