реклама на сайте
подробности

 
 
> Инициализация структуры
Jenya7
сообщение Jul 20 2018, 12:25
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Хотел немного схитрить, ну так, с краешку. Создал структуру
Код
typedef struct
{
    uint32_t menu_id;
    char *menu_text;
}MENU_ITEM;

typedef struct
{
    MENU_ITEM main_menu;
    MENU_ITEM *submenu;
}MENU;
Инициализирую
Код
MENU menu[] =
{
    {  { 1, "MENU1"},
       { {0, "SUBMENU1" }, { 1, "SUBMENU2" }, { 2, "SUBMENU3" } }
    }
};
Компилятор ругается на уровне ворнинга
Цитата
(near initialization for 'menu[1].submenu') [enabled by default]
braces around scalar initializer [enabled by default]
excess elements in scalar initializer [enabled by default]
initialization makes pointer from integer without a cast [enabled by default]

причем если убираю скобки ругается на уровне ошибки.

Не хочет видеть как указатель на массив. Все так плохо или можно что то сделать?

Сообщение отредактировал Jenya7 - Jul 20 2018, 12:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jul 28 2018, 15:36
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



+5 копеек:
индексация указателя не контролирует индекс, а индексация (имени) массива будет, при возможности, проверять индекс на допустимый диапазон.

ЗЫ
Кстати, index[array] какой-то обкуренный товарищ придумал. Любопытно было бы узнать исторические предпосылки или адекватную логическую аргументацию этого кошмара. (а не тупой отсыл к тексту стандарта, в котором не обязана быть аргументация)

Хотелось бы удостовериться, что все интуитивно непонятные места в Си существуют для обхода (старых и новых) граблей или для увеличения концентрации смысла на еденицу текста. Но с минимизацией ущерба общекомпьютерным категориям и терминам, которыми мыслят и на которых общаются разработчики, например, широкого профиля.

Сообщение отредактировал GetSmart - Jul 28 2018, 17:22


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 29 2018, 00:25
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(GetSmart @ Jul 28 2018, 18:36) *
Кстати, index[array] какой-то обкуренный товарищ придумал. Любопытно было бы узнать исторические предпосылки или адекватную логическую аргументацию этого кошмара. (а не тупой отсыл к тексту стандарта, в котором не обязана быть аргументация)

Не обкуренный товарищ, а группа обкуренных товарищей (WG14). "6.5.2.1 Array subscripting".
Из второго пункта: "The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2)))."
И далее объяснение - потому что "E1 is an array object (equivalently, a pointer to the initial element of an array object)".

Для примера с sizeof: "6.5.3.4 The sizeof and _Alignof operators", разъясняет, что от sizeof(E1) не стоит ожидать физического размера указателя ибо
sizeof "yields the size of the adjusted (pointer) type".
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 29 2018, 05:43
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aiwa @ Jul 29 2018, 04:25) *
Из второго пункта: "The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2)))."

Явно не обозначена аргументация, зачем превращать (классическую) индексацию массива в выражение со сложением. И чем не понравился вариант, когда два (три) оператора (+/-, []) могут быть применимы к массиву. Не обозначены веские причины для того, чтобы массив стал исключением из общих правил нисходящего перемещения по агрегатным типам, когда в тексте левая часть выражения указывает на более массивный агрегатный тип. При этом массивный агр. тип является источником имён и прочей инфы для нисхождения. Для массива это правило интуитивно оптимально при обращениях к многомерным массивам. Здесь же "E1[E2] is identical to (*((E1)+(E2)))" контроль диапазонов многомерия либо невозможен, либо возможен только контроль суммарного размера массива. Плюс, все операторы ".", "->" являются ассиметричными к операндам, аналогично "[]" в большинстве ЯП, изучаемых в образовательных учреждениях. Это правило делает и работу компилятора и читабельность текста проще.

С таким стандартом руки чешутся писать E1[E2]E3[E4] и прочую ерунду. Опять же, ++E1[E2] , где E2 - массив, E1 - integer lvalue, - выносит мозг конкретно. Хочется инкрементнуть элемент массива, но читается по естественным правилам это как увеличение индекса. Плюс: E1++[E2]++. Если ещё покопать, то можно мумию Тутанхамона выкопать.

Сообщение отредактировал GetSmart - Jul 29 2018, 20:30


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Инициализация структуры   Jul 20 2018, 12:25
- - AlexRayne   Цитата(Jenya7 @ Jul 20 2018, 15:25) Не хо...   Jul 20 2018, 12:32
|- - Jenya7   Цитата(AlexRayne @ Jul 20 2018, 18:32) вс...   Jul 20 2018, 12:38
- - jcxz   Цитата(Jenya7 @ Jul 20 2018, 15:25) КодME...   Jul 20 2018, 13:57
- - Arlleex   Цитата(Jenya7 @ Jul 20 2018, 16:25) приче...   Jul 20 2018, 14:14
|- - Jenya7   Цитата(Arlleex @ Jul 20 2018, 20:14) Как ...   Jul 20 2018, 15:21
|- - Arlleex   Цитата(Jenya7 @ Jul 20 2018, 18:21) Но ин...   Jul 20 2018, 15:32
- - krux   динамика.... в меню.... наибессмысленнейшее решени...   Jul 20 2018, 17:00
- - Serge V Iz   Попробуйте встать на место компилятора. Инициализа...   Jul 20 2018, 18:03
- - x893   Всё будет во флэш, инициализация не нужна. Кодtype...   Jul 20 2018, 18:33
|- - Jenya7   Цитата(x893 @ Jul 21 2018, 00:33) Всё буд...   Jul 21 2018, 05:41
|- - jcxz   Цитата(Jenya7 @ Jul 21 2018, 08:41) какая...   Jul 21 2018, 09:05
|- - GetSmart   Цитата(Jenya7 @ Jul 21 2018, 09:41) какая...   Jul 23 2018, 23:32
|- - XVR   Цитата(Jenya7 @ Jul 21 2018, 08:41) какая...   Jul 24 2018, 07:49
|- - aiwa   Цитата(XVR @ Jul 24 2018, 10:49) Вопреки ...   Jul 26 2018, 09:16
|- - Arlleex   Это все известные вещи. Но, как было правильно отм...   Jul 26 2018, 10:35
|- - XVR   Цитата(aiwa @ Jul 26 2018, 12:16) Почему ...   Jul 26 2018, 12:32
|- - aiwa   Цитата(XVR @ Jul 26 2018, 15:32) Потому ч...   Jul 27 2018, 09:09
|- - XVR   Цитата(aiwa @ Jul 27 2018, 12:09) Никаког...   Jul 27 2018, 09:19
- - x893   Это надо у компилятора спрашивать.   Jul 21 2018, 06:08
- - XVR   Janya7 - вы случайно не состоите в родстве с Гасти...   Jul 23 2018, 12:33
- - GetSmart   Апосля подумалось. Идея смысла текста топикстартер...   Jul 26 2018, 01:22
|- - jcxz   Цитата(GetSmart @ Jul 26 2018, 04:22) В с...   Jul 26 2018, 08:21
|- - AlexRayne   Цитата(GetSmart @ Jul 26 2018, 04:22) А и...   Jul 26 2018, 09:16
|- - andrew_b   Цитата(AlexRayne @ Jul 26 2018, 12:16) в ...   Jul 26 2018, 10:54
|- - Arlleex   Цитата(AlexRayne @ Jul 26 2018, 13:16) в ...   Jul 26 2018, 11:03
|- - Arlleex   Цитата(GetSmart @ Jul 28 2018, 18:36) +5 ...   Jul 28 2018, 16:51
||- - GetSmart   Цитата(Arlleex @ Jul 28 2018, 20:51) А фо...   Jul 28 2018, 17:01
|- - andrew_b   Цитата(GetSmart @ Jul 29 2018, 08:43) Плю...   Jul 29 2018, 07:14
||- - GetSmart   Цитата(andrew_b @ Jul 29 2018, 11:14) Ког...   Aug 2 2018, 02:41
||- - andrew_b   Цитата(GetSmart @ Aug 2 2018, 05:41) Да, ...   Aug 2 2018, 04:51
|||- - GetSmart   Цитата(andrew_b @ Aug 2 2018, 08:51) А с ...   Aug 2 2018, 05:39
|||- - andrew_b   При чём тут непустой блок? Пустой оператор -- это ...   Aug 2 2018, 06:53
||- - GetSmart   Там немного обновил. Отвечу так: одной из важнейш...   Aug 2 2018, 12:04
||- - aiwa   Цитата(GetSmart @ Aug 2 2018, 15:04) Подс...   Aug 2 2018, 14:00
||- - GetSmart   Цитата(aiwa @ Aug 2 2018, 18:00) 1. указа...   Aug 2 2018, 14:17
|||- - aiwa   Цитата(GetSmart @ Aug 2 2018, 17:17) Мне ...   Aug 2 2018, 14:50
|||- - GetSmart   Цитата(aiwa @ Aug 2 2018, 18:50) Так все ...   Aug 2 2018, 15:00
|||- - aiwa   Цитата(GetSmart @ Aug 2 2018, 18:00) В вы...   Aug 2 2018, 15:53
|||- - GetSmart   Цитата(aiwa @ Aug 2 2018, 19:53) В станда...   Aug 2 2018, 16:49
|||- - andrew_b   Цитата(GetSmart @ Aug 2 2018, 19:49) Туда...   Aug 3 2018, 05:01
|||- - aiwa   Цитата(GetSmart @ Aug 2 2018, 19:49) Слож...   Aug 3 2018, 09:32
|||- - GetSmart   Цитата(aiwa @ Aug 3 2018, 13:32) Не путай...   Aug 3 2018, 12:09
|||- - aiwa   Цитата(GetSmart @ Aug 3 2018, 15:09) ...Е...   Aug 3 2018, 12:57
|||- - GetSmart   Цитата(aiwa @ Aug 3 2018, 16:57) В оригин...   Aug 3 2018, 13:58
|||- - aiwa   Цитата(GetSmart @ Aug 3 2018, 16:58) В ко...   Aug 3 2018, 14:31
||- - GetSmart   ЦитатаНу да, отвлекся и написал для массива 4x4, п...   Aug 3 2018, 17:45
||- - aiwa   Цитата(GetSmart @ Aug 3 2018, 20:45) inde...   Aug 4 2018, 08:09
||- - GetSmart   Цитата(aiwa @ Aug 4 2018, 12:09) Но почем...   Aug 5 2018, 02:46
|- - aiwa   Цитата(GetSmart @ Jul 29 2018, 08:43) Явн...   Jul 29 2018, 08:38
- - GetSmart   Я пару раз добавил в конец предыдущих постов одно ...   Aug 3 2018, 06:25
- - GetSmart   В стандарте есть явные определения логики интерпре...   Aug 3 2018, 14:54
|- - aiwa   Цитата(GetSmart @ Aug 3 2018, 17:54) В ст...   Aug 3 2018, 15:14
- - XVR   Пошла 4 страница трёпа вокруг массива/указателя......   Aug 4 2018, 16:33
- - aiwa   Цитата(GetSmart @ Aug 5 2018, 05:46) Но у...   Aug 8 2018, 20:53
|- - Herz   Цитата(aiwa @ Aug 8 2018, 23:53) Так букв...   Aug 9 2018, 08:20
- - Arlleex   Действительно какая-то пьянка вокруг массива и ука...   Aug 9 2018, 04:54


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 12:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01983 секунд с 7
ELECTRONIX ©2004-2016