Re: Should GCC warn when __LINE__ is treated as %u %d %i?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/17/19 7:12 AM, Jonny Grant wrote:
Hello

**Please keep my email address in any replies.


1) should this not give type conversion warnings?

printf("lineoutput %d:%u:%i\n", __LINE__, __LINE__, __LINE__);

2) Should __LINE__ expand as an 'int', or 'unsigned int'?

Had expected line 9 to expand as '9U', but -save-temps shows it ends up as:

printf("lineoutput %d:%u:%i\n", 9, 9, 9);

The bigger problem with __LINE__ is that it need not expand to int
at all, such as in the following:

$ cat u.c && gcc -O2 -S -Wall -Wextra u.c
#line 2147483647

void f (void)
{
  __builtin_printf ("%i", __LINE__);
}
u.c: In function ‘f’:
u.c:-2147483646:21: warning: format ‘%i’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]

Notice how the line number in the message doesn't correspond to
the sum of 2147483647 and 3 (the offset from the #line directive).

Martin



C spec has §6.10.8
6.10.8 Predefined macro names

_ _LINE_ _ The presumed line number (within the current source file) of the current
source line (an integer constant). 155)


Cheers, Jonny



/* gcc -pedantic -ansi -Wall -Wconversion -Wsign-conversion -c -o print_d_u print_d_u.c */
#include <stdio.h>

int main()
{
     printf("lineoutput %d:%u:%i\n", __LINE__, __LINE__, __LINE__);
     return 0;
}




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux