Чтовносить в стандарт?
От: plastictown Норвегия  
Дата: 22.05.16 11:50
Оценка:
Доброго времени суток! Стоит задача разработать соглашение о кодировании для языка C++. В качестве основыя взял MISRA, принципе, особых проблем не возникло, без особых зверств получилось 83 пункта. Есть два вопроса. В контексте того, что софт кроссплатформенный, а работа в основном с железом, насколько принципиально использование типов данных:

typedef char char_t;
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef signed long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long uint64_t;
typedef float float32_t;
typedef double float64_t;
typedef long double float128_t;


А также явного приведения типов через static_cast в случаях, где в этом нет особой необходимости.

Спасибо!
Re: Чтовносить в стандарт?
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.05.16 13:17
Оценка: 2 (1)
Здравствуйте, plastictown, Вы писали:

P>typedef char char_t;


Это-то зачем?

P>typedef signed char int8_t;

P>typedef signed short int16_t;
P>typedef signed int int32_t;
P>typedef signed long int64_t;
P>typedef unsigned char uint8_t;
P>typedef unsigned short uint16_t;
P>typedef unsigned int uint32_t;
P>typedef unsigned long uint64_t;

Могут быть конфликты со стандартным stdint.h. Я обычно делаю хидер, который под #ifdef'ом либо включает стандартный stdint.h, там, где он есть, либо, для остальных платформ, сам определяет растущие из него типы.

P>typedef float float32_t;

P>typedef double float64_t;
P>typedef long double float128_t;

Лично для меня, по моему опыту, использование плавучки в промышленном коде — большая редкость. А если уж за каким-то ляхом в кросплатформенной программе понадобилась плавучка, сразу возникают вопросы о ее кроссплатформенном внешнем представлении.

Что до внутреннего представления, в среднем можно всюду использовать double, и не парить себе моск.
Re: Чтовносить в стандарт?
От: T4r4sB Россия  
Дата: 22.05.16 14:07
Оценка:
Кто такой лонг дабл? Это тот 80-битный тип, который микрософтовские индусы какого-то хрена выпилили из компилятора?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re: Чтовносить в стандарт?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 22.05.16 14:34
Оценка: +1
Здравствуйте, plastictown, Вы писали:

P>typedef signed long int64_t;


Говорите, кроссплатформенный? В Windows даже 64-битной long это 32 бита.
Так что тут хотя бы long long. И вообще, местный <stdint.h> как-то полезнее заката солнца вручную.

P>typedef long double float128_t;


Не знаю такой платформы. В лучшем случае long double будет 80 бит, а может и 64.

P>А также явного приведения типов через static_cast в случаях, где в этом нет особой необходимости.


Вопрос риторический?
The God is real, unless declared integer.
Re[2]: Чтовносить в стандарт?
От: plastictown Норвегия  
Дата: 22.05.16 18:37
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, plastictown, Вы писали:


P>>typedef char char_t;


Pzz>Это-то зачем?


Это цитата из MISRA C++. Плюс к тому:

The ISO (POSIX) typedefs as shown below are recommended and are used for all basic numerical
and character types in this document. For a 32-bit integer machine, these are as follows:


Далее определения типов данных.
Re: Чтовносить в стандарт?
От: Patalog Россия  
Дата: 23.05.16 19:27
Оценка:
Здравствуйте, plastictown, Вы писали:

[]

Я так ни разу и не слышал разумного объяснения всей этой порнографии с подобными typedef'ами.
Все почему-то сразу начинают говорить про некое мифическое железо, хотя на самом деле все рябота с железом один хрен выльется в маски\сдвиги и системные ф-и записи в регистры этого самого железа. ЧСХ, у этих самых системных ф-й есть свои тайпдефы и тогда происходит цирк вида — кастим yet_another_ int32_t to some_system_int32_t, либо "да ну его нафиг, все равно наш cool_unsigned_int32_t — это тоже что и ихний DWORD".
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.