|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
Как грамотно нтерпретировать ввод нового имени типа, введённого typedef16.04.2011, 14:32. Показов 4138. Ответов 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,705
|
|
| 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,705
|
|
| 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,705
|
|
| 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,705
|
|
| 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,705
|
||||||||||||||||
| 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,705
|
|||||||||||
| 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,705
|
||||||
| 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,705
|
|
| 25.05.2011, 23:46 [ТС] | |
|
0
|
|
|
|
||
| 26.05.2011, 13:26 | ||
|
0
|
||
| 26.05.2011, 13:26 | |
|
Как грамотно организовать проверку типа данных Как грамотно работать с переменными типа БитМап? Как правильно пользоваться typedef для декларации типа указателя на функцию?
Как правильно и грамотно осуществлять проверку на корректный ввод Еmail Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|