Clang: Manually Disable Warnings in a Specific Location

Utilizing public or generated code can often introduce warnings into your software builds. Many of these warnings are not serious and developers will often ignore them. This pollutes the warning report and prevents developers from noticing useful warnings in their own software.

Using clang, you can suppress warnings using a #pragma:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wfloat-equal -Wdeprecated"
#include <annoying_warning_creating_header.h>
#pragma clang diagnostic pop

I’ve often used this approach to silence acceptable warnings from external code.

One Reply to “Clang: Manually Disable Warnings in a Specific Location”

  1. Well its great, many places say pragma ignored -Wall or -Weverything will stop clang warning BUT IT DOESNT!!!!!!
    As you can see here I have tried a LOT:
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored “-Wall”
    #pragma clang diagnostic ignored “-Weverything”
    #pragma clang diagnostic ignored “-Whicpp-avoid-c-arrays”
    #pragma clang diagnostic ignored “-hicpp-avoid-c-arrays”
    #pragma clang diagnostic ignored “-Wicpp-avoid-c-arrays”
    #pragma clang diagnostic ignored “-Wcpp-avoid-c-arrays”
    #pragma GCC diagnostic ignored “-Wall”
    #pragma GCC diagnostic ignored “-Weverything”
    #pragma GCC diagnostic ignored “-Whicpp-avoid-c-arrays”
    #pragma GCC diagnostic ignored “-hicpp-avoid-c-arrays”
    #pragma GCC diagnostic ignored “-Wicpp-avoid-c-arrays”
    #pragma GCC diagnostic ignored “-Wcpp-avoid-c-arrays”
    _Pragma(“GCC diagnostic push”)
    _Pragma(“GCC diagnostic ignored \”-Wall\””)
    union {
    uint32_t i;
    char c[4];
    } bint;
    _Pragma(“GCC diagnostic pop”)
    #pragma clang diagnostic pop

    but still get:
    192:9: warning: do not declare C-style arrays, use std::array<> instead [cppcoreguidelines-avoid-c-arrays]
    char c[4];
    ^
    :192:9: warning: do not declare C-style arrays, use std::array<> instead [hicpp-avoid-c-arrays]
    ../CanFrame.cpp: In member function ‘bool CanFrame::needToEndian()’:
    ../CanFrame.cpp:183:32: warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
    #pragma GCC diagnostic ignored “-Weverything”
    ^~~~~~~~~~~~~~
    ../CanFrame.cpp:184:32: warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
    #pragma GCC diagnostic ignored “-Whicpp-avoid-c-arrays”
    ^~~~~~~~~~~~~~~~~~~~~~~~
    ../CanFrame.cpp:185:32: warning: ‘-hicpp-avoid-c-arrays’ is not an option that controls warnings [-Wpragmas]
    #pragma GCC diagnostic ignored “-hicpp-avoid-c-arrays”
    ^~~~~~~~~~~~~~~~~~~~~~~
    ../CanFrame.cpp:186:32: warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
    #pragma GCC diagnostic ignored “-Wicpp-avoid-c-arrays”
    ^~~~~~~~~~~~~~~~~~~~~~~
    ../CanFrame.cpp:187:32: warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
    #pragma GCC diagnostic ignored “-Wcpp-avoid-c-arrays”

    WHY cant I shut the thing up from whining about the array? I am using it as a simple way of determining endianess… I CANT use a std array for this

Share Your Thoughts

This site uses Akismet to reduce spam. Learn how your comment data is processed.