Вседозволяющий GCC?

Тема в разделе "WASM.UNIX", создана пользователем verelex, 30 авг 2007.

  1. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Здравствуйте.
    Есть код:
    Код (Text):
    1. static void swfdec_player_update_mouse_cursor (SwfdecPlayer *player)
    2. {
    3.   SwfdecMouseCursor new = SWFDEC_MOUSE_CURSOR_NORMAL;
    4.  
    5.   if (!player->mouse_visible) {
    6.     new = SWFDEC_MOUSE_CURSOR_NONE;
    7.   } else if (player->mouse_grab != NULL) {
    8.     /* FIXME: this needs to be more sophisticated, since SwfdecEditText may
    9.      * want to have different mouse cursors depending on location (it supports
    10.      * links in theory)
    11.      */
    12.     if (SWFDEC_IS_BUTTON_MOVIE (player->mouse_grab))
    13.       new = SWFDEC_MOUSE_CURSOR_CLICK;
    14.   }
    15.   if (new != player->mouse_cursor) {
    16.     player->mouse_cursor = new;
    17.     g_object_notify (G_OBJECT (player), "mouse-cursor");
    18.   }
    19. }
    .....
    Код (Text):
    1. /* Largest integral types.  */
    2. #if __WORDSIZE == 64
    3. typedef long int        intmax_t;
    4. typedef unsigned long int   uintmax_t;
    5. #else
    6. __extension__
    7. typedef long long int       intmax_t;
    8. __extension__
    9. typedef unsigned long long int  uintmax_t;
    10. #endif
    Это же не по стандарту? Хотел перенести на win и естественно не компилится.
    в первом случае (как я понял) просто gcc позволяет использовать "new" как имя, а во втором не понятно (в чем собственно и вопрос).
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    verelex
    gcc позволяет использовать "new" как имя
    Если файл си'шный, то почему бы и нет?
     
  3. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    verelex
    Во втором случае, вожможно, не нравится "long long int". Хотя большинство компиляторов это поддерживают, и в стандарте это прописано... и что есть __extension__ ? Напиши хоть, какая ошибка. Вообще, пользоваться индивидуальными фичами компилеров - имхо искать себе приключений.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Ustus
    Напиши хоть, какая ошибка
    Наверное что-то похожее на : "xxxxxx.h(yyy) : error C2501: '__extension__' : missing storage-class or type specifiers"

    verelex
    Придется создать свой заголовочный файл и пополнять его по мере необходимости, начать с
    Код (Text):
    1. #ifdef _MSC_VER
    2.  
    3. #define __extension__
    4.  
    5. #endif
     
  5. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    точно, это же в С++ только.
    просто я никогда раньше не встречал "long long int". Получается наоборот - Visual не поддерживает, хотя допустимо?
    Спасибо всем!
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Его недавно ввели в стандарт, но в самом стандартном стандарте от 98-го оно уже есть. Хотя в компилерах появилось раньше. Судя по всему было принято стандартом постфактум, как и многие другие расширения.

    P.S. Гы... а MSVC 7.0 действительно не жрет. :)
    error C2632: 'long' followed by 'long' is illegal
    ну тогда придется ему впихать что-то вроде
    Код (Text):
    1. #ifdef _MSC_VER
    2. typedef __int64 intmax_t;
    3. typedef unsigned __int64 uintmax_t;
    4. #endif
    можно еще проверить - может, в новых версиях уже работает long long.
     
  7. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Ustus
    long long - ещё как работает. По крайней мере, начиная с Studio 7.1.
     
  8. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    компили лучше под MinGW. там с совместимостью с gcc проблем недолжно быть