У компиляторов неявно конвертируются типы int - PullRequest
0 голосов
/ 13 мая 2011

Если значение установлено в int, например, 2, преобразует ли компилятор типы int в необходимый ему размер, например, int8_t или uint16_t и т. Д .?

Ответы [ 5 ]

1 голос
/ 13 мая 2011

Не в ванильном C, нет.Компилятор не может знать, что вы имели в виду , если вы этого не скажете.

0 голосов
/ 14 мая 2011

Целые числа являются значениями типа "int". Когда вы назначаете целочисленное значение для short или char, используя оператор "=", значение int будет преобразовано в short или char. Компилятор может обнаружить это преобразование и выполнить оптимизацию для преобразования целочисленного значения во время компиляции.

short a = 50; //50 is an int, it will be implicitly converted to short. The compiler may convert 50 to short on compile time.
int b = 60;
short c = b; //the value of b will be converted to short and assigned to c.
short d = b + 70; //b + 70 is a sum of ints and the result will be an int that will be converted to short.

int8_t и uint16_t не являются стандартными типами. Много раз эти типы могут быть определены как что-то вроде:

typedef char int8_t;
typedef unsigned short uint16_t;
0 голосов
/ 13 мая 2011

Компилятор сначала просматривает контекст выражения, узнавая, какой тип он ожидает. Контекст может быть следующим:

  • Левая часть задания
  • Ожидаемый тип аргумента, предоставляемый заголовком функции или определением оператора

Затем он вычисляет выражение, вставляя при необходимости неявные преобразования типов (приведение типов). Это

  • Promotion
  • Обрезание
  • Округление

В ситуациях, когда важны все биты, вам нужно быть предельно внимательным в отношении того, что вы пишете: типы, операторы и порядок.

0 голосов
/ 13 мая 2011

Для констант это может быть правдой, часто также выполняется обратное преобразование малого в большое: например, byte в int.

Это в некоторой степени зависит от методов реализации и оптимизации, используемых компилятором, и требований к выравниванию данных в архитектуре / ОС.Посмотрите на это написать .

0 голосов
/ 13 мая 2011

Если вы пишете

int value = 2;

, тип по умолчанию signed int.То, что делает компилятор, зависит от платформы, но он должен гарантировать, что размер int не меньше short int и не больше long int. S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...