ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1046990 Топик полностью
fk0, легенда (25.10.2020 14:58, просмотров: 781) ответил MBedder на stdint - это ведь тоже самопал, набор typedef и #define. Кто мешает сделать свое точно так же, а не через алиасы?
Что такое int_fast32_t я знаю будучи пьяным и разбуженным в 4 утра. Что такое u8 -- не знаю, не уверен, ибо есть нюансы. Для int_fast32_t есть INT_FAST32_MAX и PRIdFAST32 например, а для u8 что? Для именно u8 или i8 вообще интересно, это char, signed char или unsigned char (кто не знает -- это ТРИ РАЗНЫХ типа). Можно для всех библиотечных типов придумать свои алиасы, но читать такую программу -- невозможно. Потом #define вместо typedef использовать нельзя, т.к. у него 

глобальный контекст, а в каких-то локальных контекстах любой идентификатор не являющийся зарезервированным словом может иметь свой смысл. Классика жанра: макросы major и minor из линукса (man makedev) заставляют сходить с ума виндовс-программистов.


Вдогонку: помимо прочего нестандартные типы затрудняют юнит-тестирование и повторное использование кода. Потому, что где-то определений этих типов не будет, они будут не такие, их невозможно так просто включить в проект и т.п. Очень удобно, когда код относительно легко может перетаскиваться между проектами/архитектурами и т.п. Но для этого он должен быть написан в рамках стандарта.


В если говорить о кросс-платформенности, то жёстко задавать разрядность типов -- абсолютно дурная идея. Лучше использовать int, long, char... они для того такими и задуманы.

[ZX]