реклама на сайте
подробности

 
 
> Преобразование не стандартных записей из GNU С в стандарт ISO.
Oleg_IT
сообщение Apr 10 2011, 18:24
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Мало программировал на 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;

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

О каких-то записях догадки есть, но это догадки, а хочется быть уверенным в правильности перевода. Что-то есть в гугле.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Oleg_IT
сообщение Apr 17 2011, 14:02
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



С расширениями языка боле-менее разобрался. Вопросы остались по __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 это реализовать. Это в опциях где-то?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016