2015-01-25 6 views
-2

Я студент, выполняющий задание, требующее разливки различных типов данных в C. Наш код должен быть портативным, поэтому важно использовать sizeof. Также предлагается, чтобы мы сделали свое собственное литье, чтобы от него не было независимым от компилятора. Мой вопрос заключается в том, как правильно применить несколько типов данных к sizeof, который возвращает size_t, который является целым значением без знака?Кастинг нескольких разных типов данных в C

Ниже это выглядит странно, но я просто преобразую символы в байты, если он скомпилирован на разных архитектурах, где char может быть больше/меньше, чем 1 байт.

short amountOfBytes; 
char b = 10; 
amountOfBytes+=(short)((unsigned int)b*sizeof(char)); 

Имею ли я это право? Вот еще один пример:

short a, b = 200; 
a = (short)(((unsigned int)b+1) * sizeof(char)); 

Последний вопрос: лучше ли применять cast_ size_t, или я должен просто придерживаться unsigned int?

+2

'sizeof (char)' всегда 1. –

+3

не пытайтесь быть умнее, чем сын компилятора –

+0

не должен 'char b' быть' unsigned char b', а 'short' be' unsigned short'? –

ответ

0

Ваш код может вызывать переполнение типа подписанного типа, которое не является определенной операцией. Таким образом, код неверен.

Также sizeof(char) определяется как 1. Это, однако, не означает 8 бит. См. CHAR_BIT.