ViKo 1 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба Задавал тип uint8_t для строк. Надоело. Показалось малоинформативным. Решил писать char. Теперь при использовании старых функций выскакивают варнинги о несоответствии типов. Надо выбрать что-то одно. Что посоветуете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба что-то одно. Что посоветуете? Естественно, char. А то наткнетесь где нибудь, что char 16-битный, uint8_t - 8 битный, и на кучу глюков по этой причине с ф-циями стандартной библиотеки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба Естественно char. Строка состоит из символов, char хранит символ. И это единственное, для чего использую char - именно когда надо хранить символ (строку символов). Когда нужен байт - использую (u)int(_fast)8_t, а когда нужен указатель на область памяти, в которой может быть что угодно (для передачи, приема, побайтовой отладочной распечатки) - void (const) *, использую неявное приведение любого указателя к void (const) * и уже внутри соотвествующей функции привожу к указателю на байт: template <typename T> void dump(T const & data) { dump(&data, sizeof(T)); } void dump(void const * from, size_t size) { auto pSrc = (uint8_t const * )from; ..... } void test() { struct t1 { ...... } Data; dump(Data); } Предупреждений нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба void dump(void const * from, size_t size) { auto pSrc = (uint8_t const * )from; ..... } Ну, если плюсы, то лучше наверное так: auto pSrc = reinterpret_cast<(uint8_t const * )>(from). ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Ну, если плюсы, то лучше наверное так:Наверное лучше. Но писанины больше да и путаюсь я в этих static_cast, reinterpret_cast, const_cast. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Спасибо всем. Так и буду делать. Вопрос 16-битового char, видимо, все же, не стоит. На то есть wchar. А вот signed/unsigned - есть разногласия у компиляторописателей. Все, дошел до осознания писать на C++ для микроконтроллеров. Сложность программы сама к этому подталкивает, безо всяких холиваров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Вопрос 16-битового char, видимо, все же, не стоит. На то есть wchar. Это Вы недопоняли суть... Есть такие архитектуры, где размер char равен размеру wchar_t, и оба 16-битные. И, если на этой архитектуре реализован тип int8_t, то, если строку объявить как int8_t, что-то с ней поделать как с массивом, а потом использовать какой-нибудь стандартный strcmp, то будет смачный глюк из серии "хрен найдешь". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Это Вы недопоняли суть... Есть такие архитектуры, где размер char равен размеру wchar_t, и оба 16-битные. И, если на этой архитектуре реализован тип int8_t, то, если строку объявить как int8_t, что-то с ней поделать как с массивом, а потом использовать какой-нибудь стандартный strcmp, то будет смачный глюк из серии "хрен найдешь". Слава богу, что я не знаком с такими архитектурами. :rolleyes: Там, наверное, все типы по 16 битов? Я когда-то решил, что char уже анахронизм. Был неправ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Там, наверное, все типы по 16 битов? Нет. Там, в основном все по 32 бит, и бывают long-long-и по 40 бит. Это, конкретно, TMS320VC55xx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться