Используйте макрос для определения аргументов формата печати

Я хочу определить формат %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 Но если я сделаю это, как мой пример выше, не сработает

std::cout << "It works " << var будет работать с любым встроенным типом без необходимости указывать тип.
NathanOliver 09.05.2018 18:50

@NathanOliver std :: cout может выполнять некоторое форматирование с помощью iomanip, но printf, даже если он не является типизированным, имеет некоторые преимущества, когда дело доходит до форматирования. однако я считаю, что ускорение обеспечивает то, что заполняет пробел

kiloalphaindia 09.05.2018 18:54

Обратите внимание, что вы все еще смешиваете абстракции, предполагая, что int64_t - это то же самое, что и long long. Если бы это было так, нам не понадобились бы оба. На всякий случай вам придется использовать макрос формата, например PRId64 из <cinttypes>.

Bo Persson 09.05.2018 19:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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 ;)

Другие вопросы по теме