-
- Во-первых надо понимать, что аргументы функции будут расширены до (unsigned) int в любом случае (при передаче в функцию, при вычислениях и т.п.) Поэтому и %d работает. Но вот при приводе char с неизвестной знаковостью (в половине компиляторов fk0(348 знак., 09.08.2011 13:13)
- Дык чтобы обойтись традиционными форматами, нужно или ставить приведение типов(лень), или убивать предупреждение(еще ленивее), или не использовать все короче int(память уходит на ерунду). Похоже, придется бороться с ленью, ибо %hhu недоступно для Vladimir Ljaschko(13 знак., 09.08.2011 13:23)
- В чём проблема писать char c; printf("%u", c&0xFF) ? Какое ещё предупреждение??? А в неиспользовании всего короче int есть глубокий смысл, если CPU хотя бы 16-битный. Для 8-и бит язык C, увы, плохо подходит. - fk0(09.08.2011 15:21)
- В ИАРе есть такое Remark[Pe181]: argument is incompatible with corresponding format string conversion D:\work\Types\Type F\f_show.c 243 - Vladimir Ljaschko(09.08.2011 15:48)
- ИАР такой иар... Приведение к (int) что ли помогает? Или это из-за знака? - fk0(09.08.2011 16:15)
- язык Си отлично подходит для любой ходовой разрядности. что 8, что 16 что 32 бита. и даже 64 - тоже неплохо перевариваются Mahagam(54 знак., 09.08.2011 15:26)
- В библиотеке языка C int встроен практически везде. Расширение до int при вычислениях. Этого мало? На 8-бит это вырождается в йобибайты кода. - fk0(09.08.2011 15:31)
- на каком проце? - Mahagam(09.08.2011 17:07)
- pic18, x51, avr. - fk0(09.08.2011 18:23)
- поменяйте компилятор на нормальный - Mahagam(09.08.2011 19:01)
- Например? Hitech, KEIL, AVR-GCC ? IAR? ЧТо ещё? - fk0(10.08.2011 10:21)
- поменяйте компилятор на нормальный - Mahagam(09.08.2011 19:01)
- pic18, x51, avr. - fk0(09.08.2011 18:23)
- на каком проце? - Mahagam(09.08.2011 17:07)
- В библиотеке языка C int встроен практически везде. Расширение до int при вычислениях. Этого мало? На 8-бит это вырождается в йобибайты кода. - fk0(09.08.2011 15:31)
- В ИАРе есть такое Remark[Pe181]: argument is incompatible with corresponding format string conversion D:\work\Types\Type F\f_show.c 243 - Vladimir Ljaschko(09.08.2011 15:48)
- В чём проблема писать char c; printf("%u", c&0xFF) ? Какое ещё предупреждение??? А в неиспользовании всего короче int есть глубокий смысл, если CPU хотя бы 16-битный. Для 8-и бит язык C, увы, плохо подходит. - fk0(09.08.2011 15:21)
- Дык чтобы обойтись традиционными форматами, нужно или ставить приведение типов(лень), или убивать предупреждение(еще ленивее), или не использовать все короче int(память уходит на ерунду). Похоже, придется бороться с ленью, ибо %hhu недоступно для Vladimir Ljaschko(13 знак., 09.08.2011 13:23)
- Вроде %hu достаточно. А с %d будут разновеселые глюки. %d подразумевает аргумент типа int, соответственно знаковый и длина зависит от платформы. Как компайлер положит в стек unsigned char - вопрос философский. До unsigned short скорее всего Lightelf(63 знак., 09.08.2011 13:06)
- Не, на %hu IAR MSP430 5.30 тоже ругается. Значит расширяет до двух байт uint, что для MSP430 пофиг. - Vladimir Ljaschko(09.08.2011 13:19)
- Все аргументы будут расширяться как минимум до int. Кроме типов с большим sizeof(). - fk0(09.08.2011 13:14)
- У AVR GCC тоже есть ключик. И еще много у каких компайлеров под 8-битные платформы. Кроме того, расширение до int параметров для функции с переменным числом параметров - вопрос тонкий. - Lightelf(10.08.2011 16:25)
- Если имеется ввиду avr-gcc-шный ключик -mint8, то это не просьба не расширять, а сужение int до 8 бит (а long до 16, спасибо). И его не рекомендуют применять. avr-libc давно разбежался с этим ключиком в разные стороны. - =ReAl=(10.08.2011 17:20, )
- ООО. Очень толстый. Так делать нельзя. - fk0(10.08.2011 16:43)
- Исключение - Keil для 8051. У него есть ключик не расширять char до int. - vmp(09.08.2011 14:16)
- У AVR GCC тоже есть ключик. И еще много у каких компайлеров под 8-битные платформы. Кроме того, расширение до int параметров для функции с переменным числом параметров - вопрос тонкий. - Lightelf(10.08.2011 16:25)
- Во-первых надо понимать, что аргументы функции будут расширены до (unsigned) int в любом случае (при передаче в функцию, при вычислениях и т.п.) Поэтому и %d работает. Но вот при приводе char с неизвестной знаковостью (в половине компиляторов fk0(348 знак., 09.08.2011 13:13)