yuryhor 0 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба Есть код. Из библиотеки LPCOpen. Ничего не трогал. typedef ATTR_IAR_PACKED struct { USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */ uint16_t UnicodeString[]; /**< String data, as unicode characters (alternatively, * string language IDs). If normal ASCII characters are * to be used, they must be added as an array of characters * rather than a normal C string so that they are widened to * Unicode size. * * Under GCC, strings prefixed with the "L" character (before * the opening string quotation mark) are considered to be * Unicode strings, and may be used instead of an explicit * array of ASCII characters on little endian devices with * UTF-16-LE \c wchar_t encoding. */ } ATTR_PACKED USB_Descriptor_String_t; При компиляции выдаёт ошибку Error[Pe070]: incomplete type is not allowed. Я понимаю, что массив не определенной длины, но как догда это понимать ?? ATTR_IAR_PACKED = __packed Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 13 минут назад, yuryhor сказал: Я понимаю, что массив не определенной длины, В языке C массивы неопределенной длины в конце структуры допускаются. В плюсах - нет. Если вы хотите эту библиотеку использовать в плюсах - вам придется ее трогать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuryhor 0 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба Спасибо за подсказку. Да в опциях компилятора значится С++. хотя весь файл обернут extern "C"{} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 3 минуты назад, yuryhor сказал: хотя весь файл обернут extern "C"{} Тогда пишите создателям файла - пусть "или трусы наденут, или крестик снимут". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 1 час назад, yuryhor сказал: При компиляции выдаёт ошибку Error[Pe070]: incomplete type is not allowed. Вангую, что USB_Descriptor_Header_t не была объявлена ДО typedef ATTR_IAR_PACKED struct. 1 час назад, Сергей Борщ сказал: В языке C массивы неопределенной длины в конце структуры допускаются. В плюсах - нет. Если вы хотите эту библиотеку использовать в плюсах - вам придется ее трогать. Не знаю в каких плюсах не допускаются, но IAR 7.80.4 вполне себе нормально прожёвывает следующее: struct USB_Descriptor_Header_t { u8 z; }; __root __packed struct { USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */ u16 UnicodeString[]; } z1; Language: C++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 12 минут назад, jcxz сказал: Не знаю в каких плюсах не допускаются В тех, которые соблюдают Стандарт. Цитата A class that has been declared but not defined, or an array of unknown size or of incomplete element type, is an incompletely-defined object type.38) Incompletely-defined object types and the void types are incomplete types (3.9.1). Objects shall not be defined to have an incomplete type. 17 минут назад, jcxz сказал: но IAR 7.80.4 вполне себе нормально прожёвывает На ИАРе свет клином не сошелся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 8 минут назад, Сергей Борщ сказал: В тех, которые соблюдают Стандарт. Сомневаюсь что IAR его не соблюдает. В стандартах лазить мне лень... 8 минут назад, Сергей Борщ сказал: На ИАРе свет клином не сошелся. Судя по косвенным признакам, у ТС-а именно IAR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 1 час назад, jcxz сказал: Сомневаюсь что IAR его не соблюдает. Я вам привел цитату из Стандарта. Вы уверждаете, что ИАР этот код ест. Ах да, я снова забыл: ваше мнение и ваш компилятор самые правильные... 1 час назад, jcxz сказал: В стандартах лазить мне лень... Тогда читайте документацию на ИАР. Помнится, там был раздел "отклонения от стандарта". В порядке гуманитарной помощи: using namespace usb::descriptor; #define STRING_DESCRIPTOR(name, text) \ struct string_descriptor_##name \ { \ header Header; \ char16_t Text[sizeof(text)/ sizeof(text[0])]; \ } __attribute__((__packed__))const name = \ { \ /* do not transfer trailing null char */ \ { sizeof(name) - sizeof(char16_t), type::STRING }, \ text \ } STRING_DESCRIPTOR(Language, u"\x0409"); STRING_DESCRIPTOR(Device_name, u"device name"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 1 hour ago, yuryhor said: хотя весь файл обернут extern "C"{} extern "C" - это не про типы, а про функции. То есть эта примочка помочь никак не сможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 15 минут назад, scifi сказал: extern "C" - это не про типы, а про функции Но она как бы даже не намекакет, а явно говорит, что автор предполагал использование этого файла в плюсовых программах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 40 минут назад, Сергей Борщ сказал: Я вам привел цитату из Стандарта. Вы уверждаете, что ИАР этот код ест. Ах да, я снова забыл: ваше мнение и ваш компилятор самые правильные... Причём тут стандарт, причём тут какие-то ваши личные обиды на меня??? ТС задал конкретный вопрос: "Данный текст не компилируется, выдаёт ошибку". Я ответил конкретно на этот вопрос, не разводя ненужных здесь рассуждений о каких-то стандартах или фазах луны. PS: И да: мой компилятор - самый правильный, если речь идёт об ответе на вопрос "Компилируется в нём, что-то или нет". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 мая, 2019 Опубликовано 8 мая, 2019 · Жалоба 1 час назад, jcxz сказал: Причём тут стандарт, Перечитайте, на что вы отвечали - поймете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба В 08.05.2019 в 15:55, Сергей Борщ сказал: В порядке гуманитарной помощи: Два байта с каждого дескриптора коту под хвост :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 3 часа назад, VladislavS сказал: Два байта с каждого дескриптора коту под хвост :) Зато строки выглядят как человеческие строки, а не массив кракозябр плюс рассчитанная вручную длина.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба Да я же шучу. Конечно же, так правильнее. Порой и гораздо большую цену за удобства платить приходится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться