Я хочу определить формат %lld и использовать интро printf или snprintf
#include "stdafx.h"
#include <cstdint>
using Custom_DataType = int64_t;
#define CUSTOM_FORMAT "%lld"
int main()
{
Custom_DataType var = 9999999999;
printf("It works", CUSTOM_FORMAT, var);
return 0;
}
Я хочу сделать что-то вроде
printf("It works %lld", var);
Хочу заменить %lld на CUSTOM_FORMAT
Но если я сделаю это, как мой пример выше, не сработает
@NathanOliver std :: cout может выполнять некоторое форматирование с помощью iomanip, но printf, даже если он не является типизированным, имеет некоторые преимущества, когда дело доходит до форматирования. однако я считаю, что ускорение обеспечивает то, что заполняет пробел
Обратите внимание, что вы все еще смешиваете абстракции, предполагая, что int64_t - это то же самое, что и long long. Если бы это было так, нам не понадобились бы оба. На всякий случай вам придется использовать макрос формата, например PRId64 из <cinttypes>.





printf("It works", CUSTOM_FORMAT, var);
Эта запятая , не имеет смысла. Избавиться от этого:
printf("It works " CUSTOM_FORMAT, var);
Опять же, если вы используете C++, почему бы вам не использовать std::cout.
Вы можете использовать конкатенацию строковых литералов. С
"STRING1" "STRING2"
эквивалентно
"STRING1STRING2"
Ты можешь написать:
#define CUSTOM_FORMAT "%lld"
printf("It works " CUSTOM_FORMAT, var); // <-- no comma ;)
std::cout << "It works " << varбудет работать с любым встроенным типом без необходимости указывать тип.