Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразование не стандартных записей из GNU С в стандарт ISO.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Oleg_IT
Мало программировал на GNU С. Тут столкнулся с необходимостью перевода текста написанного для GNU на Visual Studio. Столкнулся с особенностями, отличиями от ISO. Где бы почитать о том, как правильно эти особенности обработать?

Примеры особенностей
__attribute__((packed))
__attribute__((__nonnull__(1,2)))
__pure
__attribute__((packed))
__ESCAPE__
restrict


Не нравится компилятору inline в хедер файле, когда этот хедр включён в *.c файл, в *.cpp ошибок не выдаёт

Код
static inline unsigned int CMP___(unsigned int a, unsigned int b)
{
    return (unsigned int)(a < b);
}

В объявление функции аргумент указатель на структуру. Компилятор выдаёт ошибку
1>d:\MyProj\util.h(582) : error C2373: 'cmp_func' : redefinition; different type modifiers…

Есть объявления

Код
typedef union {
    uint64_t u64;
    uint32_t u32[2];
    uint16_t u16[4];
    uint8_t  u8 [8];
    double   f64;
    float    f32[2];
} av_alias av_alias64;

typedef union {
    uint32_t u32;
    uint16_t u16[2];
    uint8_t  u8 [4];
    float    f32;
} av_alias av_alias32;

typedef union {
    uint16_t u16;
    uint8_t  u8 [2];
} av_alias av_alias16;

Компилятору не нравится повторение av_alias. av_alias используется в записи
Код
union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;

И ещё там много всякой мелочи.

О каких-то записях догадки есть, но это догадки, а хочется быть уверенным в правильности перевода. Что-то есть в гугле.
Idle
Цитата(Oleg_IT @ Apr 10 2011, 22:24) *
Где бы почитать о том, как правильно эти особенности обработать?

http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html
c90 vs c99

Цитата(Oleg_IT @ Apr 10 2011, 22:24) *
restrict

и
Цитата(Oleg_IT @ Apr 10 2011, 22:24) *
Не нравится компилятору inline в хедер файле, когда этот хедр включён в *.c файл, в *.cpp ошибок не выдаёт

компилируйте как c99
MrYuran
Цитата(Oleg_IT @ Apr 10 2011, 22:24) *
__attribute__((packed))

В некоторых конфессиях выглядит как #pragma pack
Означает упаковку объекта
Oleg_IT
Спасибо, надеюсь поможет.

Цитата(Idle @ Apr 11 2011, 08:30) *

Чего-то не открывается у меняsad.gif
Idle
Цитата(Oleg_IT @ Apr 11 2011, 15:37) *
Чего-то не открывается у меняsad.gif

http://home.datacomm.ch/t_wolf/tw/c/c9x_changes.html
Oleg_IT
? Дома обе ссылки открылись.
Спасибо.
Oleg_IT
Цитата(MrYuran @ Apr 11 2011, 09:27) *
В некоторых конфессиях выглядит как #pragma pack
Означает упаковку объекта

#pragma pack обычно идёт с числом, на сколько выравнивать. А тут выравнивание по умолчанию на 1?
MrYuran
Цитата(Oleg_IT @ Apr 12 2011, 13:43) *
#pragma pack обычно идёт с числом, на сколько выравнивать. А тут выравнивание по умолчанию на 1?

char-ы пакуются вплотную, остальное - по границе машинного слова.
Без упаковки - все одинаково.
Oleg_IT
С расширениями языка боле-менее разобрался. Вопросы остались по __ESCAPE__. В описании говорят, что этот макрос меняется от реализации компилятора и, что его можно просто опустить, но смысл этого макроса я так и не понял.
Все эти расширения направлены на оптимизацию кода и, пока, достойной замены в VS не вижу.

Не разобрался с av_alias
Цитата(Oleg_IT @ Apr 10 2011, 22:24) *
Есть объявления

Код
typedef union {
    uint64_t u64;
    uint32_t u32[2];
    uint16_t u16[4];
    uint8_t  u8 [8];
    double   f64;
    float    f32[2];
} av_alias av_alias64;

typedef union {
    uint32_t u32;
    uint16_t u16[2];
    uint8_t  u8 [4];
    float    f32;
} av_alias av_alias32;

typedef union {
    uint16_t u16;
    uint8_t  u8 [2];
} av_alias av_alias16;

Компилятору не нравится повторение av_alias. av_alias используется в записи
Код
union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;

Как это в VS сделать?

Цитата(Idle @ Apr 11 2011, 08:30) *
компилируйте как c99

Не вижу как в VS это реализовать. Это в опциях где-то?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.