C/C++ Clang-tidy <format> kütüphanesinde hata buluyor

newgammaknife

Decapat
Katılım
10 Ekim 2021
Mesajlar
43
Çözümler
1
İyi akşamlar,

clang-tidy, format header'ını her eklediğimde şu iki hatayı veriyor:
  • use of undeclared identifier '_Float32'
  • use of undeclared identifier '_Float64'
Bu hataları vermesine rağmen kodlar sorunsuz bir şekilde derlenip çalışmakta.
clang-tidy'in versiyonu 17.0.6, derleyici olarak ise GCC (g++) 13.2.0 kullanıyorum.

Yukarıda yazdığım gibi, hatalar spesifik bir kodda olmuyor. Bu küçük kod da hatayı oluşturmaya yetiyor:
C++:
#include <format>
#include <iostream>

int main()
{
    const double d{123.75418268};

    std::cout << std::format("d = {:.3e}\n", d);
}

Sorunun neden kaynaklandığını çözemedim. Windows'tan ötürü mü yoksa MinGW dağıtımını indirdiğim yerden mi anlayamadım.
Ekran görüntüsü de eklemiş olmam lazım. Sorunu başka yerlerde de araştırdım ama şimdilik bir çözüme varamadım. Şimdiden teşekkürler.

"cppcoreguidelines-*", "bugprone-*", "misc-const-correctness", "performance-avoid-endl", "google-build-using-namespace" ve "modernize-*" check'lerini kullanıyorum ve "cppcoreguidelines-pro-bounds-pointer-arithmetic", "modernize-use-trailing-return-type", "cppcoreguidelines-pro-bounds-array-to-pointer-decay", "cppcoreguidelines-avoid-magic-numbers", "bugprone-easily-swappable-parameters" ve 'yi disable ettim.
 

Dosya Ekleri

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    34 KB · Görüntüleme: 21
CMakeLists.txt kullan yada CLangd konfigürasyonu. İkisinden birini kullanmazsan, kullandığın standardı belirleyemez, default standarda gider. O da 17. Format ise 20'nin bir parçası. Benim her projemde bir CMakeLists dosyası var, orda da projenin hedef standardını belirliyorum.

Örneğin şu;
1709149684846.png


Kod:
cmake_minimum_required(VERSION 3.5)
set(PROJECT_NAME "Spiral")

project(${PROJECT_NAME})

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

set(CMAKE_CXX_STANDARD 20)
find_package(Gorgon REQUIRED)

add_executable(Spiral main.cpp Spiral.cpp)

linkgorgon(${PROJECT_NAME})

8. satırda set(CMAKE_CXX_STANDARD 20) var. Bunun gcc karşılığı -std=c++20.
 
CMakeLists.txt kullan yada CLangd konfigürasyonu. İkisinden birini kullanmazsan, kullandığın standardı belirleyemez, default standarda gider. O da 17. Format ise 20'nin bir parçası. Benim her projemde bir CMakeLists dosyası var, orda da projenin hedef standardını belirliyorum.

Örneğin şu;
Eki Görüntüle 2128677

Kod:
cmake_minimum_required(VERSION 3.5)
set(PROJECT_NAME "Spiral")

project(${PROJECT_NAME})

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

set(CMAKE_CXX_STANDARD 20)
find_package(Gorgon REQUIRED)

add_executable(Spiral main.cpp Spiral.cpp)

linkgorgon(${PROJECT_NAME})

8. satırda set(CMAKE_CXX_STANDARD 20) var. Bunun gcc karşılığı -std=c++20.
Durum hala aynı hocam. CMakeLists.txt dosyam şu şekilde:
Kod:
cmake_minimum_required(VERSION 3.5)
set(PROJECT_NAME "Sample")

project(${PROJECT_NAME})

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

set(CMAKE_CXX_STANDARD 20)
file(GLOB_RECURSE SOURCES "src/*.cpp")

add_executable(main ${SOURCES})
C++20'deki diğer kütüphaneleri de denedim, nedense sadece format'ta uyarı veriyor:
C++:
#include <cmath>
#include <format>
#include <iostream>
#include <ranges>

int main()
{
    auto rv = std::views::iota(0, 10) | std::views::transform(
                                            [](const int i)
                                            {
                                                return std::sqrt(i);
                                            });

    for (const auto& i : rv)
    {
        std::cout << std::format("{:.2f} ", i);
    }
    std::cout << '\n';
}
Visual Studio Code'da C/C++ plugin'ini kullanıyorum, her yerden Intellisense modunu C++20'ye aldım, clang-tidy'e argüman olarak da verdim. Neden sadece format'ta hata veriyor? Sorunun benim bilgisayarımda olduğundan şüpheleniyorum, burada sorun çıkarmıyor.
 

Geri
Yukarı