[cfe-dev] -Wheader-guard emits warning after #undef of guard macro

Prathamesh Kulkarni bilbotheelffriend at gmail.com
Mon Jan 13 21:58:06 PST 2014


On Tue, Jan 14, 2014 at 1:57 AM, Richard Trieu <rtrieu at google.com> wrote:
> Prathamesh,
>
> Can you tell me more about your use case?  Is this a common pattern you have
> encountered?
Um no, it's a contrived test case.

#ifndef Macro1
#define Macro2
Should warning be suppressed, if Macro2 gets undefined later in the
same header ?
eg:  (they are literally named Macro1 and Macro2)
#ifndef Macro1
#define Macro2
...
#undef Macro2
#endif

Is it better to suppress the warning because it's equivalent to:
#ifndef Macro1
#endif

>
> The header guard warning triggers on files with the following format:
>
> // Start of file
> #ifndef Macro1
> #define Macro2
> ...
> #endif // matches the #ifndef on the first line.
> // End of file
>
> and warns when Macro1 and Macro2 are close, but not exactly the same.  The
> warning already ignores cases where Macro1 and Macro2 are very different
> (edit distance is over half the length).  A similar exemption maybe be
> warranted in this case too.

Thanks for pointing that out. However that's not the issue.
Could you please explain in short heuristics used by clang to decide
when the two macros are
"sufficiently" different ? Thanks ;)

>
> Richard
>
>
> On Mon, Jan 13, 2014 at 3:06 AM, Prathamesh Kulkarni
> <bilbotheelffriend at gmail.com> wrote:
>>
>> For the following test-case:
>> #ifndef FOO
>> #define FOO2
>>
>> #undef FOO2
>> #endif
>>
>> -Wheader-guard emits warning:
>> ./foo.h:4:9: warning: 'FOO' is used as a header guard here, followed
>> by #define of a different macro [-Wheader-guard]
>> #ifndef FOO
>>         ^~~
>> ./foo.h:5:9: note: 'FOO2' is defined here; did you mean 'FOO'?
>> #define FOO2
>>         ^~~~
>>
>> Is this appropriate or should it suppress warning in this case
>> since it's equivalent to the following: ?
>> #ifndef FOO
>> #endif
>>
>> Thanks and Regards,
>> Prathamesh
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>



More information about the cfe-dev mailing list