|
Переменные long long |
|
|
|
 |
Ответов
|
Sep 6 2015, 03:33
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(inventor @ Sep 3 2015, 15:50)  пишется какая то лажа - printf ничего не выводит, хотя пытаюсь и %lld и %Ld компилятор C99 и вроде должен поддерживать все эти вещи Он и поддерживает. Должно быть так: Код long long ll = 100500; printf( "ll = %" PRIu64 "\n\r", ll ); Остальное по аналогии можно найти самостоятельно. См. например тут или тут. И лучше отойти от всех этих неопределенных short, long и т.п. В Це99 существуют более внятные типы, вроде uint32_t, uint64_t, int64_t...
|
|
|
|
|
Sep 6 2015, 17:37
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(zltigo @ Sep 6 2015, 10:04)  Находясь в твердом уме "так" писать не надо. Почему у Автора не получилсь - уже объяснили. По этой причине и использование макросов-оберток вместо явного описания формата ничего не изменит. Прежде чем лезть умничать, неплохо бы проверить/почитать. В IAR, даже с "правильной" библиотекой, действительно могут не работать %lld и %Ld, при этом PRIu64 работает без проблем. За давностью времени, сейчас уже не помню, на каком из IAR с этим сталкивался, возможно ARM, возможно AVR. Но это факт. Что у автора получилось - я видел. Костыль, да еще и кривой. Мой вариант - рабочий. Причем в отличии от ворчания отдельных граждан, проверено непосредственно в IAR. Почему "так" писать надо, следует из ссылки, что я дал. Код #include <inttypes.h> #include <stdio.h>
int main( void ) { long long ll = 0; uint64_t u64 = 0;
while( true ) { printf( "ll = %" PRIu64 "\n", ll ); printf( "u64 = %" PRIu64 "\n", u64 );
u64 = u64 ? u64 << 1 : 1; ll = ll ? ll << 1 : 1; } } Терминал: Код u64 = 144115188075855872 ll = 288230376151711744 u64 = 288230376151711744 ll = 576460752303423488 u64 = 576460752303423488 ll = 1152921504606846976 u64 = 1152921504606846976 ll = 2305843009213693952 u64 = 2305843009213693952 ll = 4611686018427387904 u64 = 4611686018427387904 ll = 9223372036854775808 u64 = 9223372036854775808 ll = 0 u64 = 0 ll = 1 u64 = 1 ll = 2 u64 = 2 ll = 4 u64 = 4 ll = 8 u64 = 8 ll = 16 u64 = 16 ll = 32 u64 = 32 ll = 64 u64 = 64 ll = 128 u64 = 128 ll = 256 u64 = 256 ll = 512 u64 = 512 ll = 1024 u64 = 1024 ll = 2048 u64 = 2048 ll = 4096 u64 = 4096
|
|
|
|
|
Sep 6 2015, 18:54
|

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

|
QUOTE (Tahoe @ Sep 6 2015, 20:37)  Прежде чем лезть умничать, неплохо бы проверить/почитать. В IAR, даже с "правильной" библиотекой, действительно могут не работать %lld и %Ld, при этом PRIu64 работает без проблем. А то, что муть " PRIu64 " есть ни что иное, как макрос-обертка llu это никакой мыслью в Вас в голове не отозвалось? CODE #define __STRINGIFY(a) #a #define __PRI64(x) __STRINGIFY(l##x) #define PRIu64 __PRI64(u) Так что "проверяй" не проверяй. QUOTE Но это факт. Увы, но это бред  . QUOTE Мой вариант - рабочий. Причем в отличии от ворчания отдельных граждан, проверено непосредственно в IAR. Не сочтите за труд выкинуть муть " PRIu64 " и написать llu и получите точно такой-же рабочий вариант.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2015, 19:09
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(zltigo @ Sep 6 2015, 21:54)  Не сочтите за труд выкинуть муть " PRIu64 " и написать llu и получите точно такой-же рабочий вариант. Вот на данной, конкретной версии EWARM? Вполне допускаю, что так оно и будет. Но это будет вариант "здесь играем, здесь не играем, здесь рыбу заворачивали"(с), в EWARM работает, в каком-нить EWAVR нет... Меня такой вариант не устраивает. Не хватало еще париться со всякой ерундой. Стандартная библиотека C99 предписывает использовать PRIxxx/SCNxxx? Значит их и буду использовать. Да, мне тоже не нравится и не привычно. Но меня никто не спрашивал.
|
|
|
|
|
Sep 6 2015, 19:52
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(zltigo @ Sep 6 2015, 22:14)  Пользуйте, если их уродство глаз не режет, только не надо фантазий о их чудодейственной силе. Я ж сказал, что глаз режет. А вот за собственным языком лучше следить. На эти "фантазии" день-два убил, пока выяснил. А все претензии и ворчания рекомендую адресовать не мне, а тем, кто занимался стандартной билиотекой. Уверен, они с удовольствием выслушают и примут меры по мотивам этой чрезвычайно конструктивной критики. Цитата(zltigo @ Sep 6 2015, 21:54)  А то, что муть " PRIu64 " есть ни что иное, как макрос-обертка llu это никакой мыслью в Вас в голове не отозвалось? Код #define __STRINGIFY(a) #a #define __PRI64(x) __STRINGIFY(l##x) #define PRIu64 __PRI64(u) Так что "проверяй" не проверяй. Да-да, конечно-конечно. Осталось только самая малость, убедиться, что в _любом_ компилере это выглядит точно так же.
|
|
|
|
|
Sep 6 2015, 20:28
|

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

|
QUOTE (Tahoe @ Sep 6 2015, 22:52)  Да-да, конечно-конечно. Осталось только самая малость, убедиться, что в _любом_ компилере это выглядит точно так же. Ну выглядит по разному, например, так: CODE #define PRIu64 "llu"  А знаете почему ВСЕГДА в результате такое для <64bit платформ, а для 64bit просто без ll? Потому, что все эти PRIu64 пишутся в разрыве кавычек текстовой строки. Это из-за того, что это макроподстановка текстовой строки в текстовую строку. И НИКАК иначе. Если-бы эти чудотворящие корявобуквоцифросочетания были-бы не макросами, то все выгдядело: printf( "ll = %PRIu64\n", ll ); а не: printf( "ll = %" PRIu64 "\n", ll ); Вот такой прикол  Вообще это просто кое как сделанная "стандартная" заплатка для обеспечения портирования между 32 и 64bit платформами более ни для чего ненужная.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2015, 22:03
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(zltigo @ Sep 6 2015, 23:28)  Это из-за того, что это макроподстановка текстовой строки в текстовую строку. И НИКАК иначе. Ага. "Я гарантирую это" (с). А "не приходило в голову"(с) более очевидное: это для того, что бы _иметь_возможность_ реализовать в виде макроподстановки? Есть гарантия, что всегда и везде это реализовано именно в виде макроподстановки? Гарантия, разумеется, не от zltigo, а нечто более официальное. И небольшой намек, как может быть реализовано.
|
|
|
|
|
Sep 7 2015, 06:26
|

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

|
QUOTE (Tahoe @ Sep 7 2015, 01:03)  И небольшой намек, как может быть реализовано. Господи  да каким боком-то здесь intrinsic функции. Уж не сочтите за труд без намеков разверуться, так сказать, во всей своей красе и показать все глубины своих представлений о языке.
--------------------
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         scifi Цитата(Tahoe @ Sep 7 2015, 01:03) Есть га... Sep 7 2015, 03:57 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 Сергей Борщ Вы можете продолжать спорить, но когда после перех... Sep 7 2015, 07:24 zltigo QUOTE (Сергей Борщ @ Sep 7 2015, 10:24) В... Sep 7 2015, 07:52  Сергей Борщ Цитата(zltigo @ Sep 7 2015, 10:52) а в ее... Sep 7 2015, 08:50   zltigo QUOTE (Сергей Борщ @ Sep 7 2015, 11:50) М... Sep 7 2015, 09:24    Сергей Борщ Цитата(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
|
|
|