Не форматируйте такой файл или каталог

#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 Вероятно, потому, что литература опережает фактическую разработку. Комитет по стандартам сначала публикует свои документы по стандартам, затем пишется литература и начинается разработка компилятора для этих новых функций. Это было бы моим предположением о том, что произошло