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

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

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

Вот так работает нормально:
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};
А вот так "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","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);

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

  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
Похожие ответы