Проблемы при сборке релизной версии.

Тема в разделе "LANGS.C", создана пользователем neutronion, 18 июн 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Сделал драйвер, попытался собрать релиз, наткнулся на неприятный сюрприз, перестал компилироваться, жалуется на
    типы переменной, которая объявлена в одном из хидеров, дебажная не жалуется и нормально собирает. Свойства проекта под релизом и дебагом одинаковы. Есть подозрения, что при релизной сборке хидеры компилятором просматриваются в другом порядке, отсюда и проблема с типом. Кто-нибудь сталкивался с такой проблемой? Что за чудеса? Можно конечно посмотреть в файл мониторе, но только что это даст? Допустим будем мы знать, что они открываются компилятором в разной последовательности, только что это даст для решения проблемы.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Какая ошибка-то?
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Ошибка такая:
    Error 31 error C2061: syntax error : identifier 'g_mainAnswer' d:\...\common\Answers.c 7

    жаловался на этот кусок:
    _LIST_QUEUE_ANSWER g_mainAnswer;
    пока не сделал так:
    struct _LIST_QUEUE_ANSWER g_mainAnswer;

    Почему так?
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В Си нужно объявлять со struct. Почему это прокатило в релизе - хз, скорее всего всё-таки не идентично в настройках проекта.
     
  5. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    еще такую особенность заметил в студии, переменные в функции нужно обязательно объявлять в начале функции. Если объявление переменной объявлено позже, чем например вызов какой-нить функции в этой функции, то происходит ошибка. Вот такие дела. Типа требует строгого порядка.
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Прокатило в дебаге.
     
  7. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Это все потому что С и С++ существенно разные языки =)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Да, именно.

    Это Си, он в этом отношении похож на Паскаль. В С++ можно объявлять в любом месте.
     
  9. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Да, но у меня в студии все настройки и для релиза и для дебага указаны как компилировать только как С.
     
  10. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    neutronion
    Код (Text):
    1. typedef struct _LIST_QUEUE_ANSWER {
    2.   BYTE  Reserved;
    3. } LIST_QUEUE_ANSWER, *PLIST_QUEUE_ANSWER;
    4.  
    5. LIST_QUEUE_ANSWER    g_mainAnswer;
    6. PLIST_QUEUE_ANSWER   pmainAnswer;
    и все будет тип_топ.

    поставь c++ и радуйся for (itn i=0;)