|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
Как грамотно нтерпретировать ввод нового имени типа, введённого typedef16.04.2011, 14:32. Показов 3763. Ответов 38
Метки нет (Все метки)
Друзья! Дело в том, что вот такой вот код:
char6 есть указатель на строку из шести символов. Это я прочёл в учебнике, то бишь вызубрил, но чуть более сложную конструкцию я сам разобрать не могу. Хотелось бы какой-то общий алгорим прочесть подобно тому, как разбирать сложные объявления функций; благодаря последнему я сам могу кропать "указатель на функцию, возвpащающую указатель на массив из тpёх указателей на функции, возвpащающие значение int" (Во вложении показано, что я имею ввиду) Здесь же непонятно как разбирать,интуитивно могу предполагать только, то символам * () [] отводится особая роль, но какая именно сам понять не могу, спасибо кто подскажет.
0
|
||||||
| 16.04.2011, 14:32 | |
|
Ответы с готовыми решениями:
38
Typedef void F(); typedef для типа функции через идентификатор Как сделать проверку на наличие похожего имени файла и запрос нового имени файла? Как грамотно реализовать многострочный ввод с клавиатуры |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.04.2011, 15:59 | |
|
kravam, typedef это конечно хорошо. НО сложные typedef-ы это исключительно головная боль, разобрать-то можно все что угодно. Вопрос зачем такое использовать?
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 16.04.2011, 16:06 [ТС] | |
|
Сам я не собираюсь использовать подобное, но для разбора ЧУЖИХ кодов. Такой код, например, я взял в одном задачнике.
Короче, разобраться и забыть до поры до времени.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 16.04.2011, 16:15 | |
|
kravam, мдя, только подробнейшим образом описал алгоритм разбора, и потом всё таки решил заглянуть во вложение (чего обыкновенно не делаю) - и увидел тот же самый алгоритм, который описывал на примере минут 20... Обидно, а самое главное - не понятно, чем он вам не понравился?
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.04.2011, 16:31 | |
|
silent_1991, Там алгоритм разбора сложных объявлений функций. А человеку нужен алгоритм разбора typedef-ов.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
| 16.04.2011, 16:34 | |||||||||||
|
ForEveR, а он чем-то отличается? Разбираем так же, а потом говорим, что с помощью char6 можем объявить переменную таким образом:
0
|
|||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||
| 16.04.2011, 16:36 [ТС] | |||||||||||
|
Откуда же я знал, что тот алгоритм можно применять к typedef?
Я и щас сомневаюсь. Ибо там всё однозначно, разбирается выражение:
В моём же случае надо разобрать ДРУГОЕ выражение
typede char и ляпнуть в конце: и это всё есть синоним типа char. Или нет?
0
|
|||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 16.04.2011, 16:43 | ||||||
|
Да почему оно другое?
Ищем идентификатор. Видим char6. Говорим "char6 - это" Идём вправо. Видим ). Ничего не говорим. Идём влево. Видим *. Говорим "указатель на". Идём вправо. Видим [6]. Говорим "массив из 6". Идём влево. Видим char. Говорим "элементов типа char". Получаем: "char6 - это указатель на массив из 6 элементов типа char". Затем видим typedef и запоминаем, что для типа (*)[6] можно применять псевдоним char6. Для примера попробуйте:
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 16.04.2011, 16:54 [ТС] | |
|
Я уже давно убедился, что эти интерпретации СОВПАДАЮТ. Но то, что они ИНОГДА совпадают не основание, чтобы применять их ВСЕГДА.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 16.04.2011, 16:55 | |
|
kravam, дайте пример, когда они НЕ совпадают.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 16.04.2011, 17:18 [ТС] | ||||||
p это функция, которая ничего не принимает и возвращает переменную типа char Вторая строка (пробуем так же интерпретировать) g это функция, которая ничего не принимает и возвращает переменную типа char Получили не имя типа (что хотелось бы, всё таки typedef), а имя функции! Нездоровое что-то. Ну поэтому я и думаю, что должны быть другие правила расшифровки typedef
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 16.04.2011, 17:24 | |
|
Погодите, а какой тип вы из такого объявления хотите получить-то? Тип функции что-ли?
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 16.04.2011, 17:29 [ТС] | ||||||
|
Вообще я не силён в этом деле и спросил бы более опытных товарищей, как интерпретировать эту запись? (Да и вообще все остальные, с чего, собсно и начал тему)
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 16.04.2011, 17:34 | |
|
Это объявление прототипа функции без параметров, возвращающей указатель на char. И ему пофигу на typedef в начале объявления, функционального типа в сях/плюсах не существует, вы не можете объявить переменную типа функции, максимум - указатель на функцию.
Добавлено через 1 минуту Хотя нет, тут получается объявление псевдонима типа, который не может быть использован в дальнейшем в объявлении. Потому как при попытке вызова g() мне говорят, что приведение к g не допускается. Добавлено через 57 секунд Это чушь, но чушь, соответствующая всем правилам, и потому спокойно проглатываемая компилятором)))
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 16.04.2011, 17:37 [ТС] | |
|
ОК, я встретил такое в чужом коде, как я должен сие прочесть?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 16.04.2011, 17:38 | ||||||
|
Единственное, что я смог придумать. Мне дают объявить функцию типа g, но описать её придётся, используя тип явно:
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 25.05.2011, 19:04 [ТС] | |
|
Никто не знает?
0
|
|
|
|
|||||||||||
| 25.05.2011, 19:17 | |||||||||||
|
Общий смысл typedef'а такой, что "typedef <существующий тип> <новый тип>". Когда имеем дело со сложными выражениями, то тут особо мудрить не надо - ищем идентификатор, который обозначает новый тип, выкидываем этот идентификатор и слово typedef. То, что осталось - это и есть "существующий тип". Т.е.
0
|
|||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||
| 25.05.2011, 19:27 [ТС] | ||||||
0
|
||||||
|
|
|||||||||||
| 25.05.2011, 19:33 | |||||||||||
|
Точно так же откидываешь typedef и g и получается "char (*())". Самые внешние скобки можно отбросить (как и п остие #18) и получится "char *()". Т.е. тип функции, возвращающей char*, параметры отсутсвуют. Чтобы лишний пробел не смущал, то переписать это как "char* ()". Но не путать с указателем на функцию, потому как у указателя на функцию скобки вокруг звёздочки ставятся.
0
|
|||||||||||
| 25.05.2011, 19:33 | |
|
Помогаю со студенческими работами здесь
20
Как грамотно организовать проверку типа данных Как грамотно работать с переменными типа БитМап? Как правильно пользоваться typedef для декларации типа указателя на функцию?
Как правильно и грамотно осуществлять проверку на корректный ввод Еmail Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|