Ваши typedefs не гарантируют ширины указанных в комментариях. Стандарт лишь дает гарантию что sizeof(char)==1, сколько там бит, не известно, может 8, может 64, а может 9thinker wrote: 23 May 2017 20:18По этой причине у нас integer вообще не использутся. А вместо него основные типы определены так. Потом их легко переопределить под другой компилятор если потребуется.perasperaadastra wrote: 23 May 2017 18:14Но они какие-то "неопределенные". К примеру, 10u это unsigned int. Но, как я понимаю, определение int разнится от платформы к платформе... Как я могу указать, что 10 это строго 8 бит, а не какие-нибудь 16?
Code: Select all
typedef unsigned char u8_t; // 8 bit unsigned typedef unsigned short u16_t; // 16 bit unsigned typedef unsigned long u32_t; // 32 bit unsigned typedef signed char s8_t; // 8 bit signed typedef signed short s16_t; // 16 bit signed typedef signed long s32_t; // 32 bit signed
C type casting
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: C type casting
Так ни о каком универсальном гарантировании ширины для данного набора определений речи и не шло.DVK wrote: 23 May 2017 22:28Ваши typedefs не гарантируют ширины указанных в комментариях. Стандарт лишь дает гарантию что sizeof(char)==1, сколько там бит, не известно, может 8, может 64, а может 9thinker wrote: 23 May 2017 20:18Code: Select all
typedef unsigned char u8_t; // 8 bit unsigned typedef unsigned short u16_t; // 16 bit unsigned typedef unsigned long u32_t; // 32 bit unsigned typedef signed char s8_t; // 8 bit signed typedef signed short s16_t; // 16 bit signed typedef signed long s32_t; // 32 bit signed
Согласно изначальному замыслу, как я его понял, речь идет именно о том, чтобы подбирать значения этих typedef вручную для каждой конкретной платформы, чтобы получить требуемые ширины типов. Т.е. typedef нужны просто для того, чтобы облегчить эту задачу - исправлять в одном централизованном месте.
С формально-педантичной точки зрения stdint.h - тоже не панацея. stdint.h гарантирует ширину таких типов, как int8_t, но не гарантирует их существования.M. Ridcully wrote: 23 May 2017 20:39 Какие-то экзотические компиляторы нужно поддерживать, где stdint.h отсутствует?
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 26871
- Joined: 29 Aug 2000 09:01
Re: C type casting
Да, у нас все типы определены в одном файле настроек проекта, который настраивается под конкретный micro и компилятор.AndreyT wrote: 23 May 2017 23:21Согласно изначальному замыслу, как я его понял, речь идет именно о том, чтобы подбирать значения этих typedef вручную для каждой конкретной платформы, чтобы получить требуемые ширины типов. Т.е. typedef нужны просто для того, чтобы облегчить эту задачу - исправлять в одном централизованном месте.
Спасибо что объяснили.AndreyT wrote: 23 May 2017 23:21С формально-педантичной точки зрения stdint.h - тоже не панацея. stdint.h гарантирует ширину таких типов, как int8_t, но не гарантирует их существования.M. Ridcully wrote: 23 May 2017 20:39 Какие-то экзотические компиляторы нужно поддерживать, где stdint.h отсутствует?
All rights reserved, all wrongs revenged.
-
- Уже с Приветом
- Posts: 514
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: C type casting
Вообще-то, хорошо было бы указать тип компилятора.
Я как-раз примерно такой баг недавно и вычёсывал, так выяснил, что некоторое компиляторы радостно всё это хозяйство скомпилируют с неожиданными (и даже разными) результатами. Майкрософтовский компилятор хотя бы выдаст предупреждение про narrowing, то же сделает и XCode. А вот с остальными как повезёт.
Я как-раз примерно такой баг недавно и вычёсывал, так выяснил, что некоторое компиляторы радостно всё это хозяйство скомпилируют с неожиданными (и даже разными) результатами. Майкрософтовский компилятор хотя бы выдаст предупреждение про narrowing, то же сделает и XCode. А вот с остальными как повезёт.
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
Креативненько Вы процитировали. Изначально, thinker писал про компилятор, а не платформу.AndreyT wrote: 23 May 2017 23:21Так ни о каком универсальном гарантировании ширины для данного набора определений речи и не шло.DVK wrote: 23 May 2017 22:28Ваши typedefs не гарантируют ширины указанных в комментариях. Стандарт лишь дает гарантию что sizeof(char)==1, сколько там бит, не известно, может 8, может 64, а может 9thinker wrote: 23 May 2017 20:18Code: Select all
typedef unsigned char u8_t; // 8 bit unsigned typedef unsigned short u16_t; // 16 bit unsigned typedef unsigned long u32_t; // 32 bit unsigned typedef signed char s8_t; // 8 bit signed typedef signed short s16_t; // 16 bit signed typedef signed long s32_t; // 32 bit signed
Согласно изначальному замыслу, как я его понял, речь идет именно о том, чтобы подбирать значения этих typedef вручную для каждой конкретной платформы,
Это одно централизованное место называется stdint.h, и исправлять там ничего не надо: любой C99-compliant компилятор предоставляет его под конкретную платформу. Думаю что у компилятора лучше получится чем подбирать значения этих typedef вручную.AndreyT wrote: 23 May 2017 23:21 чтобы получить требуемые ширины типов. Т.е. typedef нужны просто для того, чтобы облегчить эту задачу - исправлять в одном централизованном месте.
Если их не существует, то и подобрать значения этих typedef вручную тоже не получится.AndreyT wrote: 23 May 2017 23:21С формально-педантичной точки зрения stdint.h - тоже не панацея. stdint.h гарантирует ширину таких типов, как int8_t, но не гарантирует их существования.M. Ridcully wrote: 23 May 2017 20:39 Какие-то экзотические компиляторы нужно поддерживать, где stdint.h отсутствует?
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: C type casting
Ничего "креативненького". В мире С компилятор - это и есть платформа. Концепция языка никоим образом не запрещает компиляторам реализовывать hardware- и OS-abstraction layers любой толщины. Понятно, что толстый слой абстракции - не в духе языка С, который разрабатывался для максимальной эффективности. Но я не вижу необходимости привносить это деление в дискуссию без необходимости.DVK wrote: 24 May 2017 03:28 Креативненько Вы процитировали. Изначально, thinker писал про компилятор, а не платформу.
Правильный формальный термин для этого - реализация (implementation), но я замечаю, что не все его с ходу понимают правильно. Поэтому и говорю "платформа".
Если их не существует, то подбирать их придется "приблизительно", руководствуясь application-specific соображениями. Компилятор, разумеется, об этих соображениях не имеет ни малейшего представления.DVK wrote: 24 May 2017 03:28Это одно централизованное место называется stdint.h, и исправлять там ничего не надо: любой C99-compliant компилятор предоставляет его под конкретную платформу. Думаю что у компилятора лучше получится чем подбирать значения этих typedef вручную.
...
Если их не существует, то и подобрать значения этих typedef вручную тоже не получится.
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
Никогда и нигде компилятор != платформе, не надо путать. Понятие платформы, в том числе, включает в себя понятие data model, которая implementation and hardware dependent.
Все слова правильные, а вот вывод не совсем. (см. выше)AndreyT wrote: 24 May 2017 05:09 Концепция языка никоим образом не запрещает компиляторам реализовывать hardware- и OS-abstraction layers любой толщины. Понятно, что толстый слой абстракции - не в духе языка С, который разрабатывался для максимальной эффективности. Но я не вижу необходимости привносить это деление в дискуссию без необходимости.
Правильный формальный термин для этого - реализация (implementation), но я замечаю, что не все его с ходу понимают правильно. Поэтому и говорю "платформа".
Если их не существует, то не надо их аппроксимировать другими "похожими" типами. Используйте что есть под рукой.AndreyT wrote: 24 May 2017 05:09Если их не существует, то подбирать их придется "приблизительно", руководствуясь application-specific соображениями. Компилятор, разумеется, об этих соображениях не имеет ни малейшего представления.DVK wrote: 24 May 2017 03:28Это одно централизованное место называется stdint.h, и исправлять там ничего не надо: любой C99-compliant компилятор предоставляет его под конкретную платформу. Думаю что у компилятора лучше получится чем подбирать значения этих typedef вручную.
...
Если их не существует, то и подобрать значения этих typedef вручную тоже не получится.
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 3003
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: C type casting
В формальном мире языка С нет "компилятора", "платформы", "hardware", "OS", а есть только понятие implementation, т.е. реализация компилятора в совокупности с реализацией стандартной библиотеки. Все. Никакой hardware dependency в С нет и никогда не было, по крайней мере с момента его стандартизации. Язык С "живет" в окружении абстрактной С-машины, предоставляемой данной реализацией. Любые особенности реализации (implementation-dependent behavior) - это особенности данной абстрактной С-машины. Ничего, кроме абстрактной С-машины, язык не знает и знать не должен.DVK wrote: 24 May 2017 12:52Никогда и нигде компилятор != платформе, не надо путать. Понятие платформы, в том числе, включает в себя понятие data model, которая implementation and hardware dependent.
В разговорной речи, когда речь идет о языке С, устоявшейся терминологией является использование терминов "компилятор", "платформы", "реализация" как синонимов.
Тут нет никакого "вывода", а есть банальная базовая аксиоматика языка. Я ее просто цитирую дословно, тут нет ничего моего лично.
Мне не понятно противопоставление typedef-инга типов и идеи "использовать, что есть под рукой". Где связь?DVK wrote: 24 May 2017 12:52Если их не существует, то не надо их аппроксимировать другими "похожими" типами. Используйте что есть под рукой.AndreyT wrote: 24 May 2017 05:09Если их не существует, то подбирать их придется "приблизительно", руководствуясь application-specific соображениями. Компилятор, разумеется, об этих соображениях не имеет ни малейшего представления.
Best regards,
Андрей
Андрей
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
Странно: жопы нет, а слово есть... Есть 100500 (кросс)-компиляторов которые могут генерить код для разных платформ...AndreyT wrote: 24 May 2017 16:37В формальном мире языка С нет "компилятора", "платформы", "hardware", "OS", а есть только понятие implementation, т.е. реализация компилятора в совокупности с реализацией стандартной библиотеки.DVK wrote: 24 May 2017 12:52Никогда и нигде компилятор != платформе, не надо путать. Понятие платформы, в том числе, включает в себя понятие data model, которая implementation and hardware dependent.
Читайте внимательно, что я написал: data model, которую компилятор реализует для платформы, есть штука, зависящая от железа. Так понятнее?AndreyT wrote: 24 May 2017 16:37
Все. Никакой hardware dependency в С нет и никогда не было, по крайней мере с момента его стандартизации. Язык С "живет" в окружении абстрактной С-машины, предоставляемой данной реализацией. Любые особенности реализации (implementation-dependent behavior) - это особенности данной абстрактной С-машины. Ничего, кроме абстрактной С-машины, язык не знает и знать не должен.
Пошло виляние филейной частьюAndreyT wrote: 24 May 2017 16:37
В разговорной речи, когда речь идет о языке С, устоявшейся терминологией является использование терминов "компилятор", "платформы", "реализация" как синонимов.
Это как использовать слово объект вместо слова класс. В контексте может и можно понять, но просто кричит о невежестве так говорящего.
Цитаты принято оформлять соответствующим образом, чтобы чужое мнение за Ваше не приняли. А Вы приведите здесь ссылку, а мы подробно разберём, что там написано.
Надо находится, как Вы сами написали, в пределах абстрактной C машины, и не изобретать велосипед.AndreyT wrote: 24 May 2017 16:37Мне не понятно противопоставление typedef-инга типов и идеи "использовать, что есть под рукой". Где связь?DVK wrote: 24 May 2017 12:52Если их не существует, то не надо их аппроксимировать другими "похожими" типами. Используйте что есть под рукой.AndreyT wrote: 24 May 2017 05:09Если их не существует, то подбирать их придется "приблизительно", руководствуясь application-specific соображениями. Компилятор, разумеется, об этих соображениях не имеет ни малейшего представления.
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: C type casting
Во, полюбуйтесь, люди добрые - анальные черты характера буквоедство C++ программистов во всей красе!
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
А вы сами-то чьих будете?M. Ridcully wrote: 24 May 2017 18:42 Во, полюбуйтесь, люди добрые - анальные черты характера буквоедство C++ программистов во всей красе!
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: C type casting
Я по принуждению - меня деньгами принуждают на C++ кодить!DVK wrote: 24 May 2017 19:27А вы сами-то чьих будете?M. Ridcully wrote: 24 May 2017 18:42 Во, полюбуйтесь, люди добрые - анальные черты характера буквоедство C++ программистов во всей красе!
А в душе я совсем, совсем другой.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
Значит либо мало платят плохо принуждают, либо сравнительно недавно стали принуждать... У настоящих C/C++ погромистов буквоедство - профессиональная деформация...M. Ridcully wrote: 24 May 2017 22:51Я по принуждению - меня деньгами принуждают на C++ кодить!DVK wrote: 24 May 2017 19:27А вы сами-то чьих будете?M. Ridcully wrote: 24 May 2017 18:42 Во, полюбуйтесь, люди добрые - анальные черты характера буквоедство C++ программистов во всей красе!
А в душе я совсем, совсем другой.
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: C type casting
Да давненько уже - скоро лет 20 как...DVK wrote: 24 May 2017 23:20 Значит либо мало платят плохо принуждают, либо сравнительно недавно стали принуждать...
Но платят мало, очень мало. Я вам чиркану email моего начальника, вы ему тоже об этом напишите, ок?
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 2250
- Joined: 15 Aug 2003 15:02
Re: C type casting
Молодой ещё. Не расстраивайтесь - все ещё в переди!!!M. Ridcully wrote: 24 May 2017 23:40Да давненько уже - скоро лет 20 как...DVK wrote: 24 May 2017 23:20 Значит либо мало платят плохо принуждают, либо сравнительно недавно стали принуждать...
Но платят мало, очень мало.
Конечно, давайте. Если ещё чего надо, вы не стесняйтесь, спрашивайте.M. Ridcully wrote: 24 May 2017 23:40 Я вам чиркану email моего начальника, вы ему тоже об этом напишите, ок?
"Главная проблема цитат в сети Интернет в том, что люди сразу верят в их подлинность" В.И.Ленин