Существует ли буквальный суффикс для 8-битных значений? - PullRequest
0 голосов
/ 31 мая 2018

Я работаю с компилятором xc8 и хочу сказать ему, что мой литерал имеет ширину всего 8 бит.

123: без суффикса, по умолчанию int (16 бит в xc8)

123U: unsigned int и 16-битная ширина

Есть ли у вас идеи для чистого решения для описания 8-битного литерала?

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Любая идея для чистого решения для описания 8-битного литерала?

C имеет только 2 литералов : строковых литералов и составные литералы (C99).C определяет 123 и 123u как целочисленные константы , а не литералы .

Чтобы сформировать 8-битный литерал C: создайте составной литерал

#define OneTwoThree ((uint8_t) { 123 })
printf("%zu %x\n", sizeof(OneTwoThree), OneTwoThree);

// expected output
1 123

IDK, если xc8 поддерживает составные литералы .

0 голосов
/ 20 сентября 2018

Тип преобразования в (без знака)

0 голосов
/ 31 мая 2018

В C. нет 8-битных литералов. Самое близкое, что вы можете получить, это UINT8_C(123) из stdint.h, который дает вам литерал, наиболее подходящий для переменной типа uint_least8_t.Очень вероятно, что он расширится до 123U.

Что касается того, как решить эту проблему практически, вы показываете константу в определении, которое вы должны делать в любом случае:

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