printf会导致未定义的行为吗?

bry*_*ism 5 c c++

int main() 
{
  unsigned int i = 12;
  printf("%lu", i); // This yields a compiler warning
}
Run Code Online (Sandbox Code Playgroud)

在32位平台上,使用printfint使用%lu结果垃圾吗?

glg*_*lgl 8

仅声明"32位平台"并不意味着intlong两个具有32位,以及他们的unsigned同行.

所以,是的,如果unsingned long,%lu所做的,比这更长的时间,确实会发生这种情况unsigned int.

但即使长度相等,类型也不兼容,所以形式上它是未定义的行为.