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

newgammaknife

Decapat
Katılım
10 Ekim 2021
Mesajlar
45
Çö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
    34 KB · Görüntüleme: 22
Değişken tanımladığın satırı const float d{123.75418268}; şeklinde değiştirip dener misin?
 
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;


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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…