На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Явное указание членов структуры при build-time-инициализации.
    Дано:
    VS 2017
    код:
    ExpandedWrap disabled
      struct {
        int member0;
        int member1;
      } static const t = {
        .member0 = 1,
        .member1 = 2
      };

    VS почему-то не понимает такую инициализацию и ругается "синтаксической ошибкой" на точки. :(
    Хотя вроде не особо допотопный компилятор.
    В свойствах проекта перепробовал разные значения для поля "Язык\Стандарт языка C++" - ничего не помогло.
    Другие имеющиеся компиляторы нормально такое переваривают. Даже старые.
    Может его нужно ещё в какое-то место пнуть, чтоб он прожевал это?

    PS: Не знаю как правильно называется такая инициализация, чтобы загуглить это дело...
    Сообщение отредактировано: jcxz -
      Это чисто Сишная конструкция. В плюсах ее нет.
        В смысле нет? У меня другой компилятор (тоже c++) молча её компилит и не морщится.

        Добавлено
        Впрочем: вынес эту инициализацию в отдельный файл (.c) и скомпилилось.
        Спасибо Dushevny за наводку!

        PS: Всё-таки жаль, что VC не умеет такое для .cpp-файлов.
          Цитата jcxz @
          PS: Всё-таки жаль, что VC не умеет такое для .cpp-файлов.

          А так нельзя ?
          ExpandedWrap disabled
                struct {
                  int member0;
                  int member1;
                } static const t = {2,3};


          Или так:
          ExpandedWrap disabled
            struct XXMM
            {
             int member0;
             int member1;
             XXMM(): member0 (1), member1 (2){}
            };
             
            static const XXMM xxmm1,xxmm2;
          Сообщение отредактировано: ЫукпШ -
            Цитата jcxz @
            PS: Не знаю как правильно называется такая инициализация, чтобы загуглить это дело...
            В стандарте Сей ISO/IEC 9899:1999 она описана в разделе 6.7.8 Initialization. Выглядит это так:
            Цитата

            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
              Цитата Dushevny @
              А так нельзя ?
              Я знаю как это написать. Вопрос был не в этом. Вопрос был конкретный.
              Проблема не в написании своего кода, а в компиляции большого объёма чужого, где полно таких инициализаций, причём вложенных на много уровней struct/union. Который нет никакого желания весь перепахивать из-за этого.
              Сообщение отредактировано: jcxz -
                Цитата jcxz @
                В стандарте плюсов такой формы синтаксиса нет (пример из версии 2003 года):

                Ещё раз жаль. :( Так как например IAR (for ARM) прекрасно переваривает такие инициализации. Со следующими установками свойств проекта:
                Сообщение отредактировано: jcxz -

                Прикреплённая картинка
                Прикреплённая картинка
                  Цитата jcxz @
                  Цитата jcxz @
                  В стандарте плюсов такой формы синтаксиса нет (пример из версии 2003 года):

                  Ещё раз жаль. :( Так как например IAR (for ARM) прекрасно переваривает такие инициализации.

                  Значит, тебе крупно не повезло, особенно с наследством.
                  А у меня IAR для AVR не переваривает такие инициализации.
                  Зато инициализации вида
                  ExpandedWrap disabled
                        struct {
                          int member0;
                          int member1;
                        } static const t1 = {1,2};

                  спокойно перевариваются без любых дополнительных настроек.
                  -----
                  Что, интересно, твориться в голове у человека, который в простейшей ситуации
                  вместо проверенного варианта использует что-то да ещё с дополнительными "птичками" в настройках ? =:0
                  Полная разруха твориться, теперь придётся весь проект вообще переделывать, и не только
                  по этой причине.
                  Не повезло.
                  Сообщение отредактировано: ЫукпШ -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0307 ]   [ 18 queries used ]   [ Generated: 27.04.24, 13:36 GMT ]