Удивительная ошибка при инициализации структур - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот так работает нормально:
Листинг программы
  1. struct SMenu
  2. {
  3. char *MenuItems[],Id,Sel,Len;
  4. struct SMenu *Parent;
  5. };
  6. #define MLen(M) sizeof((M).MenuItems)/sizeof(char*)
  7. struct SMenu M0={{"123","456","678"},0,0,MLen(M0),&M0};
  8. struct SMenu M01={{"qqqq","www","eee"},0,0,MLen(M01),&M0};
Вот так тоже:
Листинг программы
  1. struct SMenu
  2. {
  3. char *MenuItems[],Id,Sel,Len;
  4. struct SMenu *Parent;
  5. };
  6. #define MLen(M) sizeof((M).MenuItems)/sizeof(char*)
  7. struct SMenu M0={{"123","456","678","9100"},0,0,MLen(M0),&M0};
  8. struct SMenu M01={{"qqqq","www","eee"},0,0,MLen(M01),&M0};
И даже вот так:
Листинг программы
  1. struct SMenu
  2. {
  3. char *MenuItems[],Id,Sel,Len;
  4. struct SMenu *Parent;
  5. };
  6. #define MLen(M) sizeof((M).MenuItems)/sizeof(char*)
  7. struct SMenu M0={{"123","456","678","9100"},0,0,MLen(M0),&M0};
  8. struct SMenu M01={{"qqqq","www","eee","rrrr"},0,0,MLen(M01),&M0};
А вот так "missing }":
Листинг программы
  1. struct SMenu
  2. {
  3. char *MenuItems[],Id,Sel,Len;
  4. struct SMenu *Parent;
  5. };
  6. #define MLen(M) sizeof((M).MenuItems)/sizeof(char*)
  7. struct SMenu M0={{"123","456","678"},0,0,MLen(M0),&M0};
  8. struct SMenu M01={{"qqqq","www","eee","rrrr"},0,0,MLen(M01),&M0};
Моя логика отказывается это понимать(((

Решение задачи: «Удивительная ошибка при инициализации структур»

textual
Листинг программы
  1. struct SMenu
  2. {
  3.   const char **MenuItems;
  4.   char Id,Sel,Len;
  5.   struct SMenu *Parent;
  6. };
  7.  
  8. #define ARRAY_SIZE(a) (sizeof (a) / sizeof *(a))
  9.  
  10. #define MENU_INIT(id, sel, parent, items) { items, id, sel, ARRAY_SIZE(items), parent }
  11.  
  12. static const char *M0_Items[] = { "123", "456", "678" };
  13. struct SMenu M0 = MENU_INIT(0, 0, &M0, M0_Items);
  14.  
  15. static const char *M01_Items[] = { "qqqq", "www", "eee" };
  16. struct SMenu M01 = MENU_INIT(0, 0, &M0, M01_Items);

Объяснение кода листинга программы

  1. Структура SMenub содержит поля: MenuItems - указатель на массив строк, Id - идентификатор меню, Sel - флаг выбора, Len - длина строки меню, Parent - указатель на родительское меню.
  2. Макросы ARRAY_SIZE и MENU_INIT используются для инициализации структур SMenub.
  3. Массив M0_Items содержит строки 123, 456, 678.
  4. Массив M01_Items содержит строки qqqq, www, eee.
  5. Переменная M0 инициализируется с использованием макроса MENU_INIT с указанием идентификатора, флага выбора, указателя на родительское меню и массива строк.
  6. Переменная M01 инициализируется с использованием макроса MENU_INIT с указанием идентификатора, флага выбора, указателя на родительское меню и массива строк.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы