Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.79.70] |
|
Сообщ.
#1
,
|
|
|
Дано:
VS 2017 код: struct { int member0; int member1; } static const t = { .member0 = 1, .member1 = 2 }; VS почему-то не понимает такую инициализацию и ругается "синтаксической ошибкой" на точки. Хотя вроде не особо допотопный компилятор. В свойствах проекта перепробовал разные значения для поля "Язык\Стандарт языка C++" - ничего не помогло. Другие имеющиеся компиляторы нормально такое переваривают. Даже старые. Может его нужно ещё в какое-то место пнуть, чтоб он прожевал это? PS: Не знаю как правильно называется такая инициализация, чтобы загуглить это дело... |
Сообщ.
#2
,
|
|
|
Это чисто Сишная конструкция. В плюсах ее нет.
|
Сообщ.
#3
,
|
|
|
В смысле нет? У меня другой компилятор (тоже c++) молча её компилит и не морщится.
Добавлено Впрочем: вынес эту инициализацию в отдельный файл (.c) и скомпилилось. Спасибо Dushevny за наводку! PS: Всё-таки жаль, что VC не умеет такое для .cpp-файлов. |
Сообщ.
#4
,
|
|
|
Цитата jcxz @ PS: Всё-таки жаль, что VC не умеет такое для .cpp-файлов. А так нельзя ? struct { int member0; int member1; } static const t = {2,3}; Или так: struct XXMM { int member0; int member1; XXMM(): member0 (1), member1 (2){} }; static const XXMM xxmm1,xxmm2; |
Сообщ.
#5
,
|
|
|
Цитата jcxz @ В стандарте Сей ISO/IEC 9899:1999 она описана в разделе 6.7.8 Initialization. Выглядит это так:PS: Не знаю как правильно называется такая инициализация, чтобы загуглить это дело... Цитата Как видно, никакого специального имени она не имеет.Syntax initializer: assignment-expression { initializer-list } { initializer-list , } initializer-list: designation opt initializer initializer-list , designation opt initializer designation: designator-list = designator-list: designator designator-list designator designator: [ constant-expression ] . identifier .... 7 If a designator has the form . identifier then the current object (defined below) shall have structure or union type and the identifier shall be the name of a member of that type. В стандарте плюсов такой формы синтаксиса нет (пример из версии 2003 года): Цитата 8.5 Initializers initializer: = initializer-clause ( expression-list ) initializer-clause: assignment-expression { initializer-list , opt } { } initializer-list: initializer-clause initializer-list , initializer-clause |
Сообщ.
#6
,
|
|
|
Цитата Dushevny @ Я знаю как это написать. Вопрос был не в этом. Вопрос был конкретный.А так нельзя ? Проблема не в написании своего кода, а в компиляции большого объёма чужого, где полно таких инициализаций, причём вложенных на много уровней struct/union. Который нет никакого желания весь перепахивать из-за этого. |
Сообщ.
#7
,
|
|
|
Сообщ.
#8
,
|
|
|
Цитата jcxz @ Цитата jcxz @ В стандарте плюсов такой формы синтаксиса нет (пример из версии 2003 года): Ещё раз жаль. Так как например IAR (for ARM) прекрасно переваривает такие инициализации. Значит, тебе крупно не повезло, особенно с наследством. А у меня IAR для AVR не переваривает такие инициализации. Зато инициализации вида struct { int member0; int member1; } static const t1 = {1,2}; спокойно перевариваются без любых дополнительных настроек. ----- Что, интересно, твориться в голове у человека, который в простейшей ситуации вместо проверенного варианта использует что-то да ещё с дополнительными "птичками" в настройках ? =:0 Полная разруха твориться, теперь придётся весь проект вообще переделывать, и не только по этой причине. Не повезло. |