реклама на сайте
подробности

 
 
> Переменные long long
inventor
сообщение Sep 3 2015, 12:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Как правильно использовать в IAR ?
Процессор Texas Instruments CC3200
Хочу присвоить переменной время в наносекундах или микросекундах
пишется какая то лажа - printf ничего не выводит, хотя пытаюсь и %lld и %Ld
компилятор C99 и вроде должен поддерживать все эти вещи
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Sep 7 2015, 07:24
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 7 2015, 07:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 7 2015, 08:50
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 7 2015, 09:24
Сообщение #5


Гуру
******

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



QUOTE (Сергей Борщ @ Sep 7 2015, 11:50) *
Можно озвучить критерии надо/не надо? Мне очень трудно заранее предугадать

Ну вот если "трудно", тогда и используй. Мне пока совершенно не тудно предугадывать, что даже пренося для тестирования на 64bit платформу мне незачем компилировать, как 64bit приложение. Зато ломать глаза об эти заплатки, действительно трудно. Ну b на пути портирования printf() и других проблем, типа полноты реализаций sad.gif, хватает.
QUOTE
Так же как сразу использую (u)intXX_t, из "голых" типов у меня в программах остался только char для хранения символов.

С этим проще, чем с printf() - я тоже "голых" типов почти не использую (char и int, int полезен тем, что нативный для платформы и может использован де-факто для всего, чему достаточно от 8 до 16bit ), но и (u)intXX_t в явном виде тоже по причине того, что есть typedef sm.gif
Ведь проблемы с портированием 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
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 8 2015, 12:39
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(zltigo @ Sep 7 2015, 12:24) *
char и int, int полезен тем, что нативный для платформы и может использован де-факто для всего, чему достаточно от 8 до 16bit

Для этого есть не менее стандартные типы аля int_fast8_t и int_fast16_t - и сразу из текста программы ясно что было достаточно (двух)байтовой переменной в отличии от char'а / int'а на том же месте.

Сообщение отредактировал Kabdim - Sep 8 2015, 12:45
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - zltigo   QUOTE (Kabdim @ Sep 8 2015, 15:39) Для эт...   Sep 8 2015, 12:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016