[PATCH 2/2] Deprecate inclusion of sys/sysmacros.h by sys/types.h.

Florian Weimer fweimer@redhat.com
Tue May 10 14:22:00 GMT 2016


On 05/10/2016 04:13 PM, Zack Weinberg wrote:
> On 04/25/2016 09:50 AM, Zack Weinberg wrote:
>> On Mon, Apr 25, 2016 at 3:24 AM, Florian Weimer <fweimer@redhat.com> wrote:
>>>
>>> Why do we need these new functions?  Recent GCC has support for emitting
>>> warnings from macros, if that's what you need.
>>
>> I shall look into the warnings-from-macros feature; maybe it will get
>> me out of having to use __REDIRECT.
>
> Assuming the feature you were thinking of is
>
>      _Pragma("GCC warning \"...\"")
>
> it is not useful for this task, because _Pragma accepts only a _single_
> string literal as its argument; you cannot use string literal
> concatenation to assemble a message.

I'm not sure which compiler version you are using but with

#include <stdio.h>

#define warn1(msg) _Pragma (#msg)
#define warn(msg) warn1 (GCC warning msg)

#define SYMBOL warn ("SYMBOL is deprecated") 1

int
main (void)
{
   printf ("%d\n", SYMBOL);
   return 0;
}

and GCC 5.3, I get:

t.c: In function ‘main’:
t.c:11:13: warning: SYMBOL is deprecated
    printf ("%d\n", SYMBOL);
              ^

The caret diagnostic isn't great, but it's better than nothing.

Florian



More information about the Libc-alpha mailing list