misc-definitions-in-headers — Extra Clang Tools 3.8 documentation

# Extra Clang Tools 3.8 documentation

## misc-definitions-in-headers

Finds non-extern non-inline function and variable definitions in header files, which can lead to potential ODR violations.

    // Foo.h
    int a = 1; // Warning.
    extern int d; // OK: extern variable.

    namespace N {
      int e = 2; // Warning.
    }

    // Internal linkage variable definitions are ignored for now.
    // Although these might also cause ODR violations, we can be less certain and
    // should try to keep the false-positive rate down.
    static int b = 1;
    const int c = 1;

    // Warning.
    int g() {
      return 1;
    }

    // OK: inline function definition.
    inline int e() {
      return 1;
    }

    class A {
     public:
      int f1() { return 1; } // OK: inline member function definition.
      int f2();
    };

    int A::f2() { return 1; } // Warning.