|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||||||
Как грамотно нтерпретировать ввод нового имени типа, введённого typedef16.04.2011, 14:32. Показов 4319. Ответов 38
Метки нет (Все метки)
Друзья! Дело в том, что вот такой вот код:
char6 есть указатель на строку из шести символов. Это я прочёл в учебнике, то бишь вызубрил, но чуть более сложную конструкцию я сам разобрать не могу. Хотелось бы какой-то общий алгорим прочесть подобно тому, как разбирать сложные объявления функций; благодаря последнему я сам могу кропать "указатель на функцию, возвpащающую указатель на массив из тpёх указателей на функции, возвpащающие значение int" (Во вложении показано, что я имею ввиду) Здесь же непонятно как разбирать,интуитивно могу предполагать только, то символам * () [] отводится особая роль, но какая именно сам понять не могу, спасибо кто подскажет.
0
|
||||||
| 16.04.2011, 14:32 | |
|
Ответы с готовыми решениями:
38
Typedef void F(); typedef для типа функции через идентификатор Как сделать проверку на наличие похожего имени файла и запрос нового имени файла? Как грамотно реализовать многострочный ввод с клавиатуры |
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 25.05.2011, 19:40 | |
|
kravam, чем не устроил ответ в 16 посте?
Добавлено через 1 минуту Не по теме: Evg опередил)) Но ответ был, по сути, такой же.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 25.05.2011, 20:35 [ТС] | |
|
Нет. Это вы исходите из того, раз компилится, значит есть в этом какой-то смысл. А смысла нет.
По крайней мере, если есть какая-то переменная некоторого типа, то она характеризуется точным размером. Какой размер может быть у переменной типа "функция, возвращающей char*, параметры отсутсвуют."? (Не указатель на функцию, а именно функция (пусть даже и без имени, раз мы его опускаем)) Переменная вышеупомянутого так называемого типа не обладает никаким размером.(если не считать размером длину кода, хе). Значит, это не тип, а непонятно что. То есть не всё золото, что блестит. Не всё, что компилится, имеет смысл.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||
| 25.05.2011, 21:09 | |||||
|
1
|
|||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 25.05.2011, 21:16 [ТС] | |
|
Так-то прикольно.
![]() Типы зажили самостоятельной жизнью. Типы есть, а вот переменных нет. Прямо платонство какое-то у него тоже был мир идей, самостоятельных тык скыть сущностей, независимых от вещей.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 25.05.2011, 21:18 | ||||||
|
Хм...
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 25.05.2011, 21:41 [ТС] | |
|
Не. Нужно видеть разницу между похожими вещами.
Ваш пример предполагает, что можно корректно создать переменные a и b. И даже получитьт их адреса и посмотреть в отладчике на эти адреса. Увидеть переменные! Сами же сказали "пока не создадим". Я же говорю о случае, когда переменую типа такого-то(см. выше) создать невозможно в принципе. Ситуации похожие, но разные.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 25.05.2011, 21:44 | |
|
kravam, переменную создать невозможно, но можно объявить функцию. Я не понимаю, чего вы добиваетесь.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 25.05.2011, 21:50 [ТС] | |
|
Я хочу, чтобы вы согласились, да, эта штука компилиться не должна, как не должна вода быть сухой, а воздух твёрдым
typedef char(*g());
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 25.05.2011, 21:53 | |
|
kravam, нет, не соглашусь. Должна. И в 16 посте показано, как это можно использовать. Не понимаю, чего вам не нравится. Почему вы тип связываете с размером? Да, функция не имеет размер (в общем смысле), но зато она вернёт значение, которое будет иметь соответствующий этому типу размер. Как и любая другая функция. Только о других (объявленных стандартным способом) вы почему-то никаких недовольств не выказали.
0
|
|
|
|
||
| 25.05.2011, 22:32 | ||
|
Добавлено через 9 минут Или вот такой тип: "typedef int arr_t[];". В стандартном Си ты НЕ можешь объявить переменную такого типа, но можешь объявить указатель или описать внешнюю переменную (пишу именно про стандартный Си, потому что в GNU C это можно сделать). Т.е. опять имеем тип, но не имеем права создать переменную данного типа
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||||||||||||||||
| 25.05.2011, 22:48 [ТС] | ||||||||||||||||
|
Хорошо. Пусть бывает собственно тип переменной, а пусть бывает тип не знаю даже как назвать. Моих мозгов хватает на то, что после "тип" должно идти существительное в родительном падеже. Тип человека, тип функции, тип переменной. Это ладно.
Но вернёмся к истокам. Другой вопрос. Как интерпретировать сложные объявления?:
+++++++++++++++++++ Или какое-то двойное правило?:
ОК, а этот пример интерпретируем по вашим правилам.
А простое... Это другое какое-то. Вот пока эти различия не прописаны где бы то ни было, я каждый раз буду ломать голову сложное это переопределение типа или простое. (На всякий случай: интерпретация сложных объявлений, что я в приложении дал действительно формализовано и как бы стандартизировано. Сколь угодно сложные (ЛЮБЫЕ!) обявления можно с успехом интерпретировать по приведённым правилам.)
0
|
||||||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 25.05.2011, 22:52 | |
|
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|||||||||||
| 25.05.2011, 22:59 [ТС] | |||||||||||
|
Не, ситуации разные.
Добавлено через 50 секунд Кстати, где X и Y я тоже не знаю, но это ладно, потом разберусь Добавлено через 36 секунд А в первом примере всё ясно, X это char, Y это char_
0
|
|||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 25.05.2011, 23:02 | |
|
Да нет степеней сложности. Компилятор оба выражения по одному алгоритму интерпретирует. Просто в первом случае алгоритм заканчивается, только начавшись. А во втором типу char *() ставится в соответствие псевдоним g.
Добавлено через 48 секунд X - char *() (функция без параметров, возвращающая указатель на char), Y - g.
1
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||||||
| 25.05.2011, 23:18 [ТС] | ||||||
|
Ну так-то понятно. Получается, все переопределения типов надо интерпретиовать по правилам введённым Evg, не ошибёмся. Но он там написал:
Точно так же откидываешь typedef и g и получается "char (*())". Самые внешние скобки можно отбросить (как и п остие #18) и получится "char *()". Т.е. тип функции, возвращающей char*, параметры отсутсвуют. Чтобы лишний пробел не смущал, то переписать это как "char* ()". Но не путать с указателем на функцию, потому как у указателя на функцию скобки вокруг звёздочки ставятся. typedef-то надо отбрасывать, а g не надо; последнее должно учавствовать в конечном словесном определении. Это понятно. ++++++++++++++++++++++++++++++++++++++++ +++++++++++++++ Возник вопрос. Почему в таком случае сие не компилится?
Ну и что касается самих типов (не интерпретации!) я ещё подумаю.
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 25.05.2011, 23:21 | ||
|
0
|
||
|
|
|||
| 25.05.2011, 23:31 | |||
|
1
|
|||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 25.05.2011, 23:46 [ТС] | |
|
0
|
|
|
|
||
| 26.05.2011, 13:26 | ||
|
0
|
||
| 26.05.2011, 13:26 | |
|
Как грамотно организовать проверку типа данных Как грамотно работать с переменными типа БитМап? Как правильно пользоваться typedef для декларации типа указателя на функцию?
Как правильно и грамотно осуществлять проверку на корректный ввод Еmail Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|