<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864322</guid>
        <pubDate>Sun, 24 Apr 2022 20:05:18 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864322</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864265'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mkudritsky &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T20:16:24+03:00">24.04.22, 17:16</time></span><div class='quote '>Все равно %hhd отказывается без ругани и предупреждений читать signed char.</div></div>Ну если брать реализацию, которая не поддерживает C99 (а таких хватает), то эффект будет печальным. Смотри документацию на свои средства разработки.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864268</guid>
        <pubDate>Sun, 24 Apr 2022 17:24:33 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864268</link>
        <description><![CDATA[Dushevny: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864265'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mkudritsky &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T17:16:24+00:00">24.04.22, 17:16</time></span><div class='quote '>Все равно %hhd отказывается без ругани и предупреждений читать signed char.</div></div>для этого нам свыше дан inttypes.h]]></description>
        <author>Dushevny</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864265</guid>
        <pubDate>Sun, 24 Apr 2022 17:16:24 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864265</link>
        <description><![CDATA[mkudritsky: Немного поясню, к чему я стремлюсь.<br>
Сейчас принудительно пишу часть программ на классическом Си. Ну просто сам для себя решил, что надо поглубже освоить этот замечательный язык. И писать часть сложных программ без использования классов С++.<br>
Ну а библиотека stdint.h, наверное, есть расширение классического синтаксиса Си (?). Пока в расширения классики не лезу.<br>
<br>
Хотя и С++ очень нравится, особенно вектора, множества, итераторы, алгоритмы...<br>
И все такое быстрое - не медленнее классического Си.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864251'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T14:24:47+00:00">24.04.22, 14:24</time></span><div class='quote '>Модификатор hh для типов вполне</div></div><br>
<br>
Все равно %hhd отказывается без ругани и предупреждений читать signed char.<br>
Пока примерно так действую:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">short Nzk; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Число городов, которые должен обойти коммивояжер</div><div class="code_line">signed char Ng; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Число городов</div><div class="code_line">&nbsp;</div><div class="code_line">// Задание числа городов</div><div class="code_line">printf(&quot;Число городов Nzk = &quot;);</div><div class="code_line">if (!scanf(&quot;%hd&quot;, &amp;Nzk)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;Не могу прочитать число городов Nzk\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return -1;</div><div class="code_line">}</div><div class="code_line">Ng = (signed char)Nzk; // Тут в реальной программе проверка, чтобы -129 &#60; Nzk &#60; 128</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Не знаю, мне почему-то дискомфортно, когда компилятор на ровном месте выдает предупреждения. Стараюсь этого избегать, по крайней мере в таких тривиальных участках кода.]]></description>
        <author>mkudritsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864263</guid>
        <pubDate>Sun, 24 Apr 2022 17:09:43 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864263</link>
        <description><![CDATA[Dushevny: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864251'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T14:24:47+00:00">24.04.22, 14:24</time></span><div class='quote '>Вам нужен символ – используйте char, нужно малое целое</div></div><br>
используйте (u)int_fast8_t, нужно экономить байты в памяти - используйте (u)int_least8_t, нужно описать байт, передающийся в составе пакета с прибитым гвоздями форматом - используйте uint8_t. И никаких (un)signed char/int/long и т.п. Компилятор сам подставит наиболее подходящий тип. &quot;По-моему так&#33;&quot;. <br>
<br>
&quot;Машина должна работать, а человек - думать&quot;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864243'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Eric&#045;S &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T09:47:34+00:00">24.04.22, 09:47</time></span><div class='quote '>А на счёт символов тут спорно. В разных случаях использую char, wchar_t и даже char32_t. Одного char категорически мало.</div></div>Согласен.]]></description>
        <author>Dushevny</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864251</guid>
        <pubDate>Sun, 24 Apr 2022 14:24:47 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864251</link>
        <description><![CDATA[Qraizer: Как раз для того, чтобы убрать неоднозначность, то ли малое целое, то ли символ, фикъегознает, что тут программист имел в виду, в Плюсах char сделали отдельным типом. Вам нужен символ – используйте char, нужно малое целое, добавьте к нему указание знаковости. Это здорово помогает в чтении исходников, ну а компилятор пытается в этом помогать. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-04-24T14:44:03+00:00">24.04.22, 14:44</time></span></span><br>
P.S. Модификатор hh для типов вполне Стандартен, начиная с C99 и C++11. Можно пользоваться без ограничений.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864243</guid>
        <pubDate>Sun, 24 Apr 2022 09:47:34 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864243</link>
        <description><![CDATA[Eric-S: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864240'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dushevny &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T08:55:16+00:00">24.04.22, 08:55</time></span><div class='quote '>Откройте для себя удивительный мир stdint.h и навсегда забудьте о всех signed/unsigned char, int, long, long long. В хорошо написанной программе должны быть только типы из stdint.h и char (для хранения символов).</div></div><br>
В принципе верно с оговорками. Про базовую целочисленную арифметику соглашусь и поддержу. Я подключаю cstdint, типы которого использую.<br>
<br>
Но принципы надо понимать. Всякие signed и  unsigned это основы языка. Даже если они не используются в обычных случаях, то всё равно влияют.<br>
<br>
А на счёт символов тут спорно. В разных случаях использую char, wchar_t и даже char32_t. Одного char категорически мало.]]></description>
        <author>Eric-S</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864240</guid>
        <pubDate>Sun, 24 Apr 2022 08:55:16 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864240</link>
        <description><![CDATA[Dushevny: Откройте для себя удивительный мир stdint.h и навсегда забудьте о всех signed/unsigned char, int, long, long long. В хорошо написанной программе должны быть только типы из stdint.h и char (для хранения символов).]]></description>
        <author>Dushevny</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864233</guid>
        <pubDate>Sun, 24 Apr 2022 06:36:38 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864233</link>
        <description><![CDATA[Eric-S: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mkudritsky &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T06:24:42+00:00">24.04.22, 06:24</time></span><div class='quote '>я вообще думал, что слово &quot;signed&quot; в C/C++ добавлено &quot;для красоты&quot; и его всегда можно опустить.<br>
Как видим, не всегда.</div></div><br>
Для типа char  signed действительно имеет значение. В других случаях его  действительно можно опустить. Типы: &quot;int&quot;, &quot;signed&quot; и &quot;signed int&quot; являются одним и тем же типом.]]></description>
        <author>Eric-S</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864232</guid>
        <pubDate>Sun, 24 Apr 2022 06:24:42 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864232</link>
        <description><![CDATA[mkudritsky: Всем спасибо за помощь&#33;<br>Действительно, замена char на signed char привела к отмене множества предупреждений&#33;<br>И вообще теперь буду внимательнее работать с этими типами данных.<br>Раньше я вообще думал, что слово &quot;signed&quot; в C/C++ добавлено &quot;для красоты&quot; и его всегда можно опустить.<br>Как видим, не всегда. Это служебное слово учит программиста аккуратности.]]></description>
        <author>mkudritsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864230</guid>
        <pubDate>Sun, 24 Apr 2022 06:06:43 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864230</link>
        <description><![CDATA[Eric-S: Тип char это именно код узкого символа. И поток  ostream понимает его именно как символ, а не число. Аналогично с  другими функциями.<br><br>Кроме типа &quot;char&quot;, есть ещё два типа &quot;signed char&quot; и &quot;unsigned char&quot;. Это три разных типа&#33; Впрочем, они тоже  отчасти несут  смысл кода символа.<br><br>Знаковость типа &quot;char&quot;, не определена. К примеру в компиляторе  microsoft c++, её можно изменить параметром компилятора. Так что  char годится только для кодирования ascii.<br><br>Хранить  же маленькое число можно в char. Если размерность устраивает, то почему бы не использовать. В этом плане предупреждений нет и не должно быть.<br><br>Чтобы вывести числовое значение  char, использую приведение к   int. В итоге  компилятор понимает, что это число и перестаёт ворчать. Это именно для вывода.<br><br>Другое место, где могут возникнуть предупреждения, это сужения типов. При неявном приведении из большого числа к меньшему, компилятор будет ворчать. В таких случаях использую явное приведение static_cast.]]></description>
        <author>Eric-S</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864228</guid>
        <pubDate>Sun, 24 Apr 2022 05:17:31 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864228</link>
        <description><![CDATA[OpenGL: char это символ, и, более того, его знаковость это то ли implementation defined, то ли unspecified behavior. Если тебе нужны однобайтовые целые, то используй явно signed/unsigned char, с ними не должно проблем возникать. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-04-24T05:21:59+00:00">24.04.22, 05:21</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=426974&view=findpost&p=3864227'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mkudritsky &#064; <time class="tag-quote__quoted-time" datetime="2022-04-24T04:57:32+00:00">24.04.22, 04:57</time></span><div class='quote '> (В Паскале все было проще - там byte и char разные типы данных).</div></div><br>
Формально в плюсах тоже - std::is_same_of_v&lt;char, (un)signed char&gt; всегда false вне зависимости от знаковости char. И на cppreference вот что пишут:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>    char - type for character representation which can be most efficiently processed on the target system (has the same representation and alignment as either signed char or unsigned char, but is always a distinct type). </div></div>]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864227</guid>
        <pubDate>Sun, 24 Apr 2022 04:57:32 +0000</pubDate>
        <title>Тип char (unsigned char) как целое число</title>
        <link>https://forum.sources.ru/index.php?showtopic=426974&amp;view=findpost&amp;p=3864227</link>
        <description><![CDATA[mkudritsky: Добрый день&#33;<br>
Занимаюсь целочисленным программированием и по этой причине часто использую целые типы данных.<br>
<br>
С основными целочисленными типами данных работается легко и без проблем: short, int, long long int... (и соответствующие unsigned).<br>
Но вот есть в C/C++ загадочный целочисленный тип данных: char<br>
С ним-то и возникают проблемы.<br>
При попытке его использования (работа с целыми числами от -128 до 127) все программы работают правильно, но компиляторы (особенно современные) выдают просто россыпь предупреждений:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">warning: array subscript has type ‘char’ [-Wchar-subscripts]</div></ol></div></div></div></div><br>
<br>
Например, в небольшой программе решения Задачи Коммивояжера методом динамического программирования мне выдается 52 (&#33;&#33;&#33;) предупреждения&#33;<br>
Как я понял, проблема довольно фундаментальная.<br>
Даже при чтении/выводе на консоль целых переменных типа char не существует специального модификатора.<br>
Приходится с printf/scanf использовать %hhd. И тоже с предупреждениями.<br>
<br>
Вопрос: какой прием надо использовать для целочисленных переменных типа char, чтобы избавиться от этих бесконечных предупреждений?<br>
Может ключ какой-то надо указать компилятору?<br>
<br>
P.S. 1. Зачем все это? Просто переменная типа char занимает 1 байт, а уже переменная типа short - аж 2 байта. Для некоторых задач целочисленного программирования эта экономия существенна&#33;<br>
(В Паскале все было проще - там byte и char разные типы данных).<br>
2. Все те же вопросы актуальны и для типа unsigned char.<br>
3. Наверное, этой теме уже лет 60 - ровно столько, сколько существует язык Си. И она давно уже разжевана.<br>
Тогда просьба - дайте ссылку на статью, где все это объясняется покороче и &quot;на пальцах&quot;.]]></description>
        <author>mkudritsky</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	