Удивительная ошибка при инициализации структур - C (СИ)
Формулировка задачи:
Вот так работает нормально:
Вот так тоже:
И даже вот так:
А вот так "missing }":
Моя логика отказывается это понимать(((
struct SMenu { char *MenuItems[],Id,Sel,Len; struct SMenu *Parent; }; #define MLen(M) sizeof((M).MenuItems)/sizeof(char*) struct SMenu M0={{"123","456","678"},0,0,MLen(M0),&M0}; struct SMenu M01={{"qqqq","www","eee"},0,0,MLen(M01),&M0};
struct SMenu { char *MenuItems[],Id,Sel,Len; struct SMenu *Parent; }; #define MLen(M) sizeof((M).MenuItems)/sizeof(char*) struct SMenu M0={{"123","456","678","9100"},0,0,MLen(M0),&M0}; struct SMenu M01={{"qqqq","www","eee"},0,0,MLen(M01),&M0};
struct SMenu { char *MenuItems[],Id,Sel,Len; struct SMenu *Parent; }; #define MLen(M) sizeof((M).MenuItems)/sizeof(char*) struct SMenu M0={{"123","456","678","9100"},0,0,MLen(M0),&M0}; struct SMenu M01={{"qqqq","www","eee","rrrr"},0,0,MLen(M01),&M0};
struct SMenu { char *MenuItems[],Id,Sel,Len; struct SMenu *Parent; }; #define MLen(M) sizeof((M).MenuItems)/sizeof(char*) struct SMenu M0={{"123","456","678"},0,0,MLen(M0),&M0}; struct SMenu M01={{"qqqq","www","eee","rrrr"},0,0,MLen(M01),&M0};
Решение задачи: «Удивительная ошибка при инициализации структур»
textual
Листинг программы
struct SMenu { const char **MenuItems; char Id,Sel,Len; struct SMenu *Parent; }; #define ARRAY_SIZE(a) (sizeof (a) / sizeof *(a)) #define MENU_INIT(id, sel, parent, items) { items, id, sel, ARRAY_SIZE(items), parent } static const char *M0_Items[] = { "123", "456", "678" }; struct SMenu M0 = MENU_INIT(0, 0, &M0, M0_Items); static const char *M01_Items[] = { "qqqq", "www", "eee" }; struct SMenu M01 = MENU_INIT(0, 0, &M0, M01_Items);
Объяснение кода листинга программы
- Структура
SMenub
содержит поля:MenuItems
- указатель на массив строк,Id
- идентификатор меню,Sel
- флаг выбора,Len
- длина строки меню,Parent
- указатель на родительское меню. - Макросы
ARRAY_SIZE
иMENU_INIT
используются для инициализации структурSMenub
. - Массив
M0_Items
содержит строки123
,456
,678
. - Массив
M01_Items
содержит строкиqqqq
,www
,eee
. - Переменная
M0
инициализируется с использованием макросаMENU_INIT
с указанием идентификатора, флага выбора, указателя на родительское меню и массива строк. - Переменная
M01
инициализируется с использованием макросаMENU_INIT
с указанием идентификатора, флага выбора, указателя на родительское меню и массива строк.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д