vak: (бэсм-6)
[personal profile] vak
Типы в языке Си штука рекурсивная. То есть внутри описателя типа могут встречаться другие описатели типов. Грок накидал ещё несколько вариантов для тестирования парсера.

Вариант 1: Вложенная структура с простым полем
struct Outer { int x; struct Inner { int y; } inner; }
Вариант 2: Структура с указателем на себя
struct Node { int data; struct Node *next; }
Вариант 3: Указатель на функцию с параметром-структурой
void (*)(struct Pair { int x; int y; })
Вариант 4: Вложенная структура с полем-массивом
struct Container { struct Item { int value; } items[10]; }
Вариант 5: Объединение с вложенной структурой и анонимной структурой
union Variant { struct { int a; int b; }; struct Named { float x; } named; }

Date: 2025-05-13 23:36 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Хороший язык! Мы как-то отвлеклись на объектное ориентирование. А зря.

Date: 2025-05-14 08:55 (UTC)
chaource: (Default)
From: [personal profile] chaource
Нормальная система типовъ - это System F, System F-omega и выше по лямбда-кубу. Все остальное невозможно нормально использовать, будутъ одни баги, ночами сидѣть надо будетъ и ловить segmentation faults. Я уже черезъ это прошелъ и больше не хочу.

Date: 2025-05-14 08:52 (UTC)
chaource: (Default)
From: [personal profile] chaource
Я никогда не понималъ, какъ работать съ union. Предположимъ, функцiя на входъ получаетъ union { int a; float b; }. И что теперь дѣлать? Какъ узнать, int тамъ или float?

Date: 2025-05-14 14:35 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Это смотря какая функция. Например, чтобы напечатать содержимое объекта длиной 4 байта в шестнадцатеричном виде совершенно не нужно знать, int он или float.
OSZAR »