Перейти к содержанию
    

Эквивалентность типов

Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int?

Изменено пользователем Sergey-Ufa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для "стандартных" типов данных в общем случае справедливо следующее неравенство:

 

sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char)

 

И - всё! Поэтому ответ на Ваш вопрос - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эквивалентен ли тип _int8 типу char. а тип _int32 типу long int?

 

Никак нет. _int8, _int32 это нестандартные типы, которые каждый волен объявить как угодно. char стандартный, и может быть размером 8 бит или более (в некоторых реальных компиляторах он 16-битный). long int - тоже стандартный - минимум 32 бита, нередко реально 64-битный, встречал еще 40-битый.

 

Если брать стандарт 2011, то char эквивалентен int_least8_t, а long int - int_least32_t (и то не уверен, вспоминая 40-битные DSP-шные лонги, а int_least32 там вроде и есть 32)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос собственно возник по следующей причине. Программа WinFilter генерирует код реализации цифрового фильтра на С. Вот кусочки из него:

static __int32 y[NCoef+1]; //output samples

static __int16 x[NCoef+1]; //input samples

__int8 iir(__int8 NewSample) {...};

В компиляторе CVAVR этих типов нет. Я предположил, что можно изменить код таким образом:

static long int y[NCoef+1]; //output samples

static int x[NCoef+1]; //input samples

char iir(char NewSample) {...};

Будет ли это корректно? Спасибо всем, кто откликнулся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В компиляторе CVAVR этих типов нет.

 

Если этих типов компилятор не знает, то это просто замечательно! Тогда вы просто определите эти типы через #define и радуйтесь. А во всей программе делать замены не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это так что-ли?
используйте для этого специально созданный инструмент typedef

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо, делаем так:

 

typedef signed long int _int32;

typedef signed int _int16;

typedef signed char _int8;

 

Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А это зависит от того, какой у вас процессор. На 32-разрядном ARM-е, например, signed int будет иметь ширину 32 бита.

И для того, чтобы программисты так не мучились, в языке Си есть стандартный заголовочный файл stdint.h.

С ним всё будет просто и однозначно:

#include <stdint.h>
typedef int32_t _int32;
typedef int16_t _int16;
typedef int8_t _int8;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но будет ли эквивалентна такая замена для выполнения кода? Вопрос, собственно, был именно об этом.
Скажем так: работать это будет. В случае AVR это будет, скорее всего, оптимально и по быстродействию, и по объему кода. Если вы возьмете более другой процессор - надо будет детально вникать в код. Возможно более "длинный" тип будет работать быстрее или операции с ним будут занимать меньше памяти кода.

 

 

С ним всё будет просто и однозначно
Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока вы не дочитатете до определений типов uint_fastXX_t и uint_leastXX_t :)

А эти типы добавлены специально для того, чтобы программистам жизнь мёдом не казалась:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я регулярно их использую. И получаю от это удовольствие:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...