Много лет использую С++ односторонне: перевожу нужные мне фрагменты кода на Delphi, на котором и работаю. Но недавно понадобился CUDA C. Разобрался, написал консольное приложение. Отладил для небольших чисел. Там у меня переменная
Код:
int sum;
Ее вывод:
Код:
printf("sum=%i",sum);
растет очень быстро от входа, поэтому когда на входе числа чуть больше, то пришлось сначала определить
Код:
long int sum;
а потом
Код:
long long int sum;
И тут программа перестала работать правильно - сказалось мое одностороннее знание. Переводя С++, я меньше всего обращал внимание, какой формат указан в printf. В Delphi
Код:
write('sum=',sum)
будет правильно работать, если
Код:
sum : integer;
и если
Код:
sum : int64;
Полез в литературу. В Б.Страуструп "Язык С++" и в Б. Эккель "Философия С++" и в Б.Керниган, Д.Ритчи "Язык программирования Си" не нашел. Естественно, нашел в MSDN %I64i, но там сказано, что это специфичное расширение для VS. А вдруг я решу перенести свою программу на Линукс? Есть какой стандартный спецификатор для вывода 64-битных целых? Конечно же, можно и в стандарты залезть, но многие стандарты не самая удобная вещь для чтения. Может, есть такая книга, где полно и систематично изложены подобные детали? (По Delphi и Паскалю таких книг масса!)