%PRId和%d格式字符有什么区别?

tra*_*rad 3 c printf conversion-specifier length-modifiers

请考虑以下代码:

#include <stdio.h>
#include <inttypes.h>

void main(void)
{
    int32_t a = 44;

    fprintf(stdout, "%d\n", a);
    fprintf(stdout, "%"PRId32"\n", a);
}
Run Code Online (Sandbox Code Playgroud)

什么时候使用%d更好,"%"PRId32什么时候使用会更好?这两种格式字符有何不同?这是否与int32_t您的硬件/机器上的typedeffed有关?

Osi*_*ris 6

使用%dintPRId32int32_t.

也许在你的平台int32_t上只是一个typedef int但是一般来说这不是真的.使用错误的说明符会调用未定义的行为,应该避免使用.

正如@EricPostpischil指出的那样,在外部%d使用时,在引用的格式字符串PRId32中使用.原因是它PRId32是一个宏,它扩展为字符串文字然后连接.