This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Incorrect compile warning, possible bug in inttypes.h


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]