Переменные типа int, как утверждается, являются «длиной одного машинного слова», но во встроенных системах компиляторы C для 8-битного микроиспользования имеют int из 16 бит !, (8 бит для беззнакового символа), а затем для большего количества бит,int ведет себя нормально: в 16-битных micros int тоже 16-битные, а в 32-битных micros int - это 32-битные и т. д.
Итак, есть ли стандартный способ проверить это, например, BITSIZEOF (int)?
как "sizeof" для байтов, но для битов.
это была моя первая идея
register c=1;
int bitwidth=0;
do
{
bitwidth++;
}while(c<<=1);
printf("Register bit width is : %d",bitwidth);
Но он принимает c как int, и в 8-битных компиляторах обычно используют int как 16-битные, поэтому он дает мне 16 как результат,Кажется, нет никакого стандарта для использования "int" в качестве "ширины регистра", (или это не соблюдается)
Почему я хочу его обнаружить?Предположим, мне нужно много переменных, которым нужно менее 256 значений, поэтому они могут быть 8, 16, 32 бита, но использование правильного размера (такого же, как память и регистры) ускорит процесс и сэкономит память, а если это невозможнорешил в коде, я должен переписать функцию для каждой архитектуры
РЕДАКТИРОВАТЬ После прочтения ответов я нашел эту хорошую статью
http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/
Я приведу заключение (полужирный шрифт)
Таким образом, суть в следующем.Если вы хотите начать писать эффективный, переносимый встроенный код, первым делом вы должны начать использовать типы данных C99 «наименьший» и «быстрый».Если ваш компилятор не совместим с C99, тогда будут жаловаться до тех пор, пока он не станет ... или смените поставщиков. Если вы сделаете это изменение, я думаю, вы будете приятно удивлены достигнутыми улучшениями в размере и скорости кода.