This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Incorrect compile warning, possible bug in inttypes.h
- From: "Cary R." <cygcary at yahoo dot com>
- To: The Cygwin Mailing List <cygwin at cygwin dot com>
- Date: Mon, 27 Apr 2015 22:52:26 +0000 (UTC)
- Subject: Incorrect compile warning, possible bug in inttypes.h
- Authentication-results: sourceware.org; auth=none
- Reply-to: "Cary R." <cygcary at yahoo dot com>
The following code:
#include <stdio.h>
#include <inttypes.h>
int main()
{
int32_t ival = 1;
uint32_t uval = 2;
printf("int = %"PRId32", uint = %"PRIu32".\n", ival, uval);
return 0;
}
when compiled with either gcc or clang on a 32-bit system and with the -Wall flag produces the following warnings:
tmp.c: In function âmainâ:
tmp.c:9:5: warning: format â%ldâ expects argument of type âlong intâ, but argument 2 has type âint32_tâ [-Wformat=]
printf("int = %"PRId32", uint = %"PRIu32".\n", ival, uval);
^
tmp.c:9:5: warning: format â%luâ expects argument of type âlong unsigned intâ, but argument 3 has type âuint32_tâ [-Wformat=]
tmp.c:9:5: warning: format â%ldâ expects argument of type âlong intâ, but argument 2 has type âint32_tâ [-Wformat=]
tmp.c:9:5: warning: format â%luâ expects argument of type âlong unsigned intâ, but argument 3 has type âuint32_tâ [-Wformat=]
I'm not sure why the double report for this, but both gcc and clang do the same thing. This looks to be an issue that is generated because a long is 32 bits on a 32-bit system and in inttypes.h __have_long32 is likely defined and that is forcing the use of the 'l' formats when that is incorrect for at least these two 32 bit types.
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple