Почему реализация переменных размеров C специфична? - PullRequest
0 голосов
/ 30 ноября 2011

Разве не имеет смысла (например), чтобы int всегда был 4 байта?

Как мне обеспечить, чтобы мои программы на C были кроссплатформенными, если размеры переменных зависят от конкретной реализации?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Размеры типов не определены c, потому что код c должен быть способен компилироваться во встроенных системах, а также в среднем процессоре x86 и будущих процессорах.

Вы можете включить stdint.hи затем используйте такие типы, как:

int32_t (32-разрядный целочисленный тип)

и

uint32_t (32-разрядный целочисленный тип без знака)

1 голос
/ 30 ноября 2011

C часто используется для написания низкоуровневого кода, специфичного для архитектуры ЦП, на которой он работает.Предполагается, что размер типа int или типа указателя сопоставляется с нативными типами, поддерживаемыми процессором.На 32-битном процессоре 32-битные целочисленные значения имеют смысл, но они не подходят для меньших процессоров, которые были распространены в начале 1970-х годов, или на микрокомпьютерах, которые последовали десятилетие спустя.В настоящее время, если ваш процессор имеет встроенную поддержку 64-битных целочисленных типов, почему вы хотите ограничиться 32-битными целыми числами?

Конечно, это делает написание действительно переносимых программ более сложным, поскольку выпредложил.Лучший способ убедиться, что вы не встраиваете случайные зависимости от типов конкретной архитектуры в свои программы, - это раннее портирование их на различные архитектуры, а также частое создание и тестирование на всех этих архитектурах.Со временем вы познакомитесь с проблемами переносимости и будете стремиться писать свой код более тщательно.Осознание того, что не все процессоры имеют целочисленные типы такой же ширины, как их типы указателей, или что не все компьютеры используют арифметику с двойным дополнением для целых чисел со знаком, поможет вам распознать эти предположения в своем собственном коде.

0 голосов
/ 30 ноября 2011

Вам необходимо проверить размер int в вашей реализации. Не думайте, что это всегда 4 байта. Используйте

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