#c #gcc #fmt
#c #ссагпз #fmt
Вопрос:
Я пытался использовать утилиту форматирования C (std::format). Я попытался скомпилировать эту простую программу:
#include <format>
int main()
{
std::cout << std::format("{}, {}", "Hello world", 123) << std::endl;
return 0;
}
Когда я пытаюсь скомпилировать с g -std=c 2a format_test.cpp
помощью , это дает мне следующее:
format_test.cpp:1:10: fatal error: format: No such file or directory
1 | #include <format>
|
У меня есть GCC 10.2.0
Комментарии:
1. Это особенность C 20. У вас есть новейший GCC?
Ответ №1:
В соответствии с этим: https://en.cppreference.com/w/cpp/compiler_support в настоящее время нет компиляторов, поддерживающих «Форматирование текста» (P0645R10, std::format
). (По состоянию на декабрь 2020 года)
Макрос тестирования функций, определенный в этой статье __cpp_lib_format
(также указан здесь), так что вы можете написать свой код следующим образом, чтобы проверить:
#if __has_include(<format>)
#include <format>
#endif
#ifdef __cpp_lib_format
// Code with std::format
#else
// Code without std::format, or just #error if you only
// want to support compilers and standard libraries with std::format
#endif
Предложение также ссылается на https://github.com/fmtlib/fmt как полная реализация, с fmt::format
заменой std::format
на . Хотя вам придется пройти через некоторые препятствия, чтобы связать зависимость или добавить ее в свою систему сборки, а также разобраться с лицензией / подтверждением, если это необходимо.
Ваш пример с {fmt}
: https://godbolt.org/z/Ycd7K5
Комментарии:
1. Сейчас 2022 год, и это все еще не реализовано?
2. @FreelanceConsultant: Если это не было реализовано, то почему оно упоминается в книгах и ссылках? Я читал об этой библиотеке на en.cppreference.com/w/cpp/utility/format/format . Даже если я запускаю фрагмент кода примера, я получаю ту же ошибку, что и выше. Я в замешательстве, почему функция, которая еще не реализована, часто упоминается в документах.
3. @Avinash Вероятно, потому, что литература опережает фактическую разработку. Комитет по стандартам сначала публикует свои документы по стандартам, затем пишется литература и начинается разработка компилятора для этих новых функций. Это было бы моим предположением о том, что произошло