What is the correct printf specifier for printing pid_t

后端 未结 2 520
悲&欢浪女
悲&欢浪女 2020-12-15 15:34

I\'m currently using a explicit cast to long and using %ld for printing pid_t, is there a specifier such as %z for size_t

相关标签:
2条回答
  • 2020-12-15 16:34

    There's no such specifier. I think what you're doing (casting the pid_t to long and printing it with "%ld") is fine; you could use an even wider int type, but there's no implementation where pid_t is bigger than long and probably never will be.

    0 讨论(0)
  • 2020-12-15 16:36

    With integer types lacking a matching format specifier as in the case of pid_t, yet with known sign-ness1, cast to widest matching signed type and print.

    If sign-ness is not known for other system type, cast to the widest unsigned type or alternate opinion

    pid_t pid = foo();
    
    // C99
    #include <stdint.h>
    printf("pid = %jd\n", (intmax_t) pid);
    

    Or

    // C99
    #include <stdint.h>
    #include <inttypes.h>
    printf("pid = %" PRIdMAX "\n", (intmax_t) pid);
    

    Or

    // pre-C99
    pid_t pid = foo();
    printf("pid = %ld\n", (long) pid);
    

    1 The pid_t data type is a signed integer type which is capable of representing a process ID.

    0 讨论(0)
提交回复
热议问题