为什么 'l' 和 'll' 修饰符对 printf 做同样的事情 (C)

Why 'l' and 'll' modifier do the same for printf (C)

我不明白 printf 函数的 lll 长度说明符之间的区别:

printf("%ld \n", 9999999991474836499);
printf("%lld \n", 9999999991474836499);

两个 printf 产生相同的输出,因为类型溢出:

-8446744082234715117                                                                                                                                                                                                              
-8446744082234715117

所以当我删除一位数字时,我会这样做:

printf("%ld \n", 999999999147483649);
printf("%lld \n", 999999999147483649);

我得到了相同的输出:

999999999147483649                                                                                                                                                                                                                
999999999147483649  

没有溢出。

我不明白 l 的意思 long intll 的意思 long long int 为什么他们没有任何区别?

在某些计算机上,longlong long 具有相同的表示形式,因此 lll 做同样的事情。大多数 64 位平台都是如此,Windows 除外。 (这是对它为何以这种方式工作的解释,而不是它必须以这种方式工作的承诺。)

在其他平台上——64 位 Windows、32 位任何东西,你就没那么幸运了。

无论哪种方式,该程序都不正确,它只是碰巧偶然运行,并且不能保证它会继续运行,即使在同一平台上也是如此。

“%ld”不能保证处理 64 位整数。 “%lld”是。

在 C 库的许多实现中,没有区别,但某些平台可能无法使用 %ld

打印大的 64 位数字