Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to printf a size_t without warning in mingw-w64 gcc 7.1?

Tags:

People also ask

How to print size_ t value in C?

We should use “%zu” to print the variables of size_t length. We can use “%d” also to print size_t variables, it will not show any error. The correct way to print size_t variables is use of “%zu”. In “%zu” format, z is a length modifier and u stand for unsigned type.

What is Size_t in printf?

size_t is an unsigned integral data type which is defined in various header files such as: <stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, < time .h>, <wchar.h> It's a type which is used to represent the size of objects in bytes and is therefore used as the return type by the sizeof operator.


I am using the mingw-w64 (x64) fork of minGW as prepared on nuwen.net. This is from the 7.1 version of gcc :

gcc --version gcc (GCC) 7.1.0 

I am compiling this program:

#include <stdio.h>  int main(void) {     size_t a = 100;     printf("a=%lu\n",a);     printf("a=%llu\n",a);     printf("a=%zu\n",a);     printf("a=%I64u\n",a); } 

with warnings and c11 standard:

gcc -Wall -Wextra -Wpedantic -std=c11 test_size_t.c 

and I get these warnings:

   test_size_t.c: In function 'main':     test_size_t.c:6:14: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka long long unsigned int}' [-Wformat=]       printf("a=%lu\n",a);                 ~~^                 %I64u     test_size_t.c:6:14: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t {aka long long unsigned int}' [-Wformat=]       printf("a=%lu\n",a);                 ~~^                 %I64u     test_size_t.c:7:14: warning: unknown conversion type character 'l' in format [-Wformat=]       printf("a=%llu\n",a);                   ^     test_size_t.c:7:9: warning: too many arguments for format [-Wformat-extra-args]       printf("a=%llu\n",a);              ^~~~~~~~~~     test_size_t.c:7:14: warning: unknown conversion type character 'l' in format [-Wformat=]       printf("a=%llu\n",a);                   ^     test_size_t.c:7:9: warning: too many arguments for format [-Wformat-extra-args]       printf("a=%llu\n",a);              ^~~~~~~~~~     test_size_t.c:8:13: warning: unknown conversion type character 'z' in format [-Wformat=]       printf("a=%zu\n",a);                  ^     test_size_t.c:8:9: warning: too many arguments for format [-Wformat-extra-args]       printf("a=%zu\n",a);              ^~~~~~~~~     test_size_t.c:8:13: warning: unknown conversion type character 'z' in format [-Wformat=]       printf("a=%zu\n",a);                  ^     test_size_t.c:8:9: warning: too many arguments for format [-Wformat-extra-args]       printf("a=%zu\n",a);              ^~~~~~~~~     test_size_t.c:9:9: warning: ISO C does not support the 'I64' ms_printf length modifier [-Wformat=]       printf("a=%I64u\n",a);          ^~~~~~~~~~~     test_size_t.c:9:9: warning: ISO C does not support the 'I64' ms_printf length modifier [-Wformat=] 

I would like to printf a size_t without warning but don't know the correct format specifier in this situation.