|
Переменные long long |
|
|
|
 |
Ответов
|
Sep 7 2015, 07:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Вы можете продолжать спорить, но когда после перехода на 64-битную ОС у меня компилятор начал ругаться на printf("%lu", uint64_t_var), который прекрасно собирался на 32-битной системе (поскольку uint64_t из unsigned long превратился в unsigned int), для меня вопрос использования форматных макросов PRIxxx решился сам собой. Еще раньше я накалывался на аналогичное с uint32_t при переносе кода AVR<->PC, но поскольку на AVR я printf использую крайне редко, это не сильно напрягало. Я никого не убеждаю, каждый сам ест свой кактус.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 7 2015, 07:52
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Сергей Борщ @ Sep 7 2015, 10:24)  Вы можете продолжать спорить, но когда после перехода на 64-битную ОС у меня компилятор начал ругаться на printf("%lu", uint64_t_var), который прекрасно собирался на 32-битной системе (поскольку uint64_t из unsigned long превратился в unsigned int), для меня вопрос использования форматных макросов PRIxxx решился сам собой. Вопрос ведь не в использовании заплатки, где надо, а в ее использовании где НЕ НАДО и о том, что работа этого чудотворящего макроса НИЧЕМ не отличается от llu в контексте 32bit ARM. Так что твоя реплика не по делу. Ну и по хорошему, а не через заплатку, такой вопрос решается через новые префиксы типа I64, но это пока отдано на откуп компилятору, хотя многие уже поддерживают.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 7 2015, 08:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(zltigo @ Sep 7 2015, 10:52)  а в ее использовании где НЕ НАДО Можно озвучить критерии надо/не надо? Мне очень трудно заранее предугадать - будет код переноситься (хотя бы для тестирования) на другую платформу или нет. Поэтому сразу использую описанный в стандарте путь - PRIxx. Он работает всегда в отличие от. Так же как сразу использую (u)intXX_t, из "голых" типов у меня в программах остался только char для хранения символов. Это тоже описанный в стандарте путь и работает он всегда. P.S. Я то сначала думал, что придирка к сообщению №10 пошла из-за объявления переменной long long и дальнейшего использования в строке формата PRIu64, т.е. если объявили long long, то и в строке формата надо использовать llu, а если хотим использовать PRIu64, то и переменную надо было объявлять как uint64_t ("Вы или трусы наденьте, или крестик снимите"), а потом смотрю - нет, тут оказывается сам факт использования PRIu64 объявлен ересью. С этим я согласиться не могу.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 7 2015, 09:24
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Сергей Борщ @ Sep 7 2015, 11:50)  Можно озвучить критерии надо/не надо? Мне очень трудно заранее предугадать Ну вот если "трудно", тогда и используй. Мне пока совершенно не тудно предугадывать, что даже пренося для тестирования на 64bit платформу мне незачем компилировать, как 64bit приложение. Зато ломать глаза об эти заплатки, действительно трудно. Ну b на пути портирования printf() и других проблем, типа полноты реализаций  , хватает. QUOTE Так же как сразу использую (u)intXX_t, из "голых" типов у меня в программах остался только char для хранения символов. С этим проще, чем с printf() - я тоже "голых" типов почти не использую (char и int, int полезен тем, что нативный для платформы и может использован де-факто для всего, чему достаточно от 8 до 16bit ), но и (u)intXX_t в явном виде тоже по причине того, что есть typedef  Ведь проблемы с портированием 8->16->32->64 появилист ЗАДОЛГО до C99. Так что решал я эти проблемы уже 80-x годах и посему у меня с тех пор "свои" типы: uchar, bint, ushort... Пишется-читается мне легче, а из "проблем" портирования редактирование одного *.h файла, тем более, что все равно часто при смене платформы меняется не только разрядность, и вот просто так ничего совсем не делая не получится. Да и новыми типами все не так радужно. При том-же портировании 8->16 большая пробоема в изобилии 8bit переменных, которых на других платформах 8bit корявы и приводят к тормознутости. Так у меня появилась 'bint', которая для все не восьмибитовых является int. C появлением C99 компиляторов я у себя в хидере заменил ее на "least" - поверил, работает, но оказалось НЕ всегда. Компилятор на свое усмотрение то 8, то 32 бита таки переменные делал. Так что сначала заменил ее на "fast", а потом и обратно на тупой int. QUOTE тут оказывается сам факт использования PRIu64 объявлен ересью. С этим я согласиться не могу. Ересью НЕ объявлен. Просто назван тем, чем он является на самом деле - ЗАПЛАТКОЙ. Примитивной заплаткой для того, что-бы хоть создать какую-то видимость решения ЯВНОЙ ПРОБЛЕМЫ заложенной отцом-основателем языка. Как и ЛЮБУЮ ЗАПЛАТКУ ее надо использовать только в вынужденых случаях, а не где попало, типа на всякий случай. Такое заплаточное "решение" лежит на поверхности и для его реализации совершенно не требуется C99 компилятора - достаточно любого голого препроцессора. Единственное нормальное решение это ОБЯЗАТЕЛЬНОЕ введение однозначных префиксов.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
inventor Переменные long long Sep 3 2015, 12:50 megajohn Цитата(inventor @ Sep 3 2015, 15:50) комп... Sep 3 2015, 13:32 inventor Цитата(megajohn @ Sep 3 2015, 16:32) б-р-... Sep 3 2015, 13:55  zltigo QUOTE (inventor @ Sep 3 2015, 16:55) став... Sep 3 2015, 15:53   inventor Цитата(zltigo @ Sep 3 2015, 18:53) 1) Как... Sep 4 2015, 07:28    yes Цитата(inventor @ Sep 4 2015, 10:28) комп... Sep 4 2015, 11:54     megajohn Цитата(yes @ Sep 4 2015, 14:54) в микроко... Sep 4 2015, 12:12      zltigo QUOTE (megajohn @ Sep 4 2015, 15:12) скол... Sep 4 2015, 12:26      yes Цитата(megajohn @ Sep 4 2015, 15:12) скол... Sep 4 2015, 15:07 Tahoe Цитата(inventor @ Sep 3 2015, 15:50) пише... Sep 6 2015, 03:33 zltigo QUOTE (Tahoe @ Sep 6 2015, 06:33) Он и по... Sep 6 2015, 07:04  Tahoe Цитата(zltigo @ Sep 6 2015, 10:04) Находя... Sep 6 2015, 17:37   zltigo QUOTE (Tahoe @ Sep 6 2015, 20:37) Прежде ... Sep 6 2015, 18:54    Tahoe Цитата(zltigo @ Sep 6 2015, 21:54) Не соч... Sep 6 2015, 19:09     zltigo QUOTE (Tahoe @ Sep 6 2015, 22:09) Значит ... Sep 6 2015, 19:14      Tahoe Цитата(zltigo @ Sep 6 2015, 22:14) Пользу... Sep 6 2015, 19:52       zltigo QUOTE (Tahoe @ Sep 6 2015, 22:52) Да-да, ... Sep 6 2015, 20:28        Tahoe Цитата(zltigo @ Sep 6 2015, 23:28) Это из... Sep 6 2015, 22:03         scifi Цитата(Tahoe @ Sep 7 2015, 01:03) Есть га... Sep 7 2015, 03:57         zltigo QUOTE (Tahoe @ Sep 7 2015, 01:03) И небол... Sep 7 2015, 06:26 inventor Цитата(Tahoe @ Sep 6 2015, 06:33) Он и по... Sep 8 2015, 05:08  zltigo QUOTE (inventor @ Sep 8 2015, 08:08) Я СВ... Sep 8 2015, 05:59   inventor Цитата(zltigo @ Sep 8 2015, 08:59) Вообще... Sep 8 2015, 06:34    megajohn хм, как то странно отработал printf c long long
... Sep 8 2015, 07:08     megajohn Цитата(megajohn @ Sep 8 2015, 10:08) хм, ... Sep 8 2015, 07:31    Сергей Борщ Цитата(zltigo @ Sep 7 2015, 12:24) Такое ... Sep 8 2015, 06:19     zltigo QUOTE (Сергей Борщ @ Sep 8 2015, 09:19) Д... Sep 8 2015, 07:21    Kabdim Цитата(zltigo @ Sep 7 2015, 12:24) char и... Sep 8 2015, 12:39     zltigo QUOTE (Kabdim @ Sep 8 2015, 15:39) Для эт... Sep 8 2015, 12:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|