Пожалуйста, не могли бы вы помочь мне понять, как этот выбор сделан?
Угадай компилятор, мы говорим, это C один.
Сначала у нас есть спецификация для языка C, см. Статью wiki C data types. Но тогда C spec дает некоторую гибкость для реализации ...
int
является словом архитектуры. Слово представляет собой почти атомный размер обработки архитектуры. Для устаревшего ARM это 32-разрядный, считайте, что архитектура имеет 32-разрядные регистры.
char
кратчайший бит. В настоящее время вы не можете получить меньше 8, и почти все архитектуры позволяют вам играть с 8. 8 хорошо, потому что он соответствует ASCII, поэтому вы получаете эффективную поддержку от архитектуры для воспроизведения строк ASCII.
short
помогает, когда ваша архитектура может выполнять операции с 16-битными значениями, а long
подходит для 64-разрядных.
signed
/unsigned
на самом деле не имеет отношения к этому, так как в случае, когда некоторая битовая строка используется как подписанная, она уменьшается в верхнем пределе того, что она может представлять.
В компиляторе есть исходный файл с таблицей, грубо говоря. – bmargulies
Вы в основном говорите компилятору, указав, какую архитектуру вы хотите скомпилировать. Это указывает на файлы заголовков и такие, которые определяют эти вещи. – Thilo
Некоторые люди сообщают компилятору свой выбор, автору компилятора или человеку, который портировал компилятор на эту архитектуру. и т. д. Очень специфический для компилятора специфический нестандартный и может меняться в любое время с любой новой версией компилятора, а некоторые компиляторы могут даже иметь параметры командной строки для изменения этих определений. –