核心答案
long long int 对应的格式说明符是 %lld。

(图片来源网络,侵删)
这是一个示例代码:
#include <stdio.h>
int main() {
// 声明一个 long long int 类型的变量
// 注意:为了确保数值足够大,最好使用 LL 后缀
long long int my_number = 123456789012345LL;
// 使用 %lld 打印
printf("The value of my_number is: %lld\n", my_number);
return 0;
}
输出:
The value of my_number is: 123456789012345
重要细节与注意事项
long long int 的简写
你可以使用 long long,它和 long long int 是完全等价的。int 可以省略。
long long my_number = 123456789012345LL; // 这行代码和上面完全一样
字面量(Literal)的后缀
当你给 long long 类型的变量赋一个很大的整数值时(比如超过 int 或 long 的范围),必须在数字后面加上后缀 LL 或 ll,以告诉编译器这个字面量是 long long 类型。

(图片来源网络,侵删)
- 推荐使用
LL,因为它更容易阅读,不易与数字1混淆。 ll也可以,但LL是更现代和推荐的做法。
long long big_num = 9000000000000000000LL; // 正确 // long long big_num = 9000000000000000000; // 在某些系统上可能会警告或出错,因为默认可能是 int
跨平台问题:%lld vs %I64d
这是一个非常经典且重要的跨平台问题。
%lld: 这是 C99 标准以及现代 C++ 标准中规定的格式说明符,在 Linux、macOS 和绝大多数现代编译器(如 GCC, Clang)上,这是正确的。%I64d: 这是 微软的 Visual Studio (MSVC) 专用的格式说明符,在旧的 Windows 环境下使用 MSVC 编译时,必须使用%I64d。
如何解决兼容性问题?
最好的方法是使用预处理器指令来区分编译器。
#include <stdio.h>
int main() {
long long num = 123456789012345LL;
#ifdef _MSC_VER
// 如果是微软的编译器 (Visual Studio)
printf("MSVC style: %I64d\n", num);
#else
// 如果是其他编译器 (GCC, Clang, MinGW等)
printf("Standard style: %lld\n", num);
#endif
return 0;
}
- 注意:如果你在 Windows 上使用 MinGW(一个在 Windows 上模拟 GCC 工具链的环境),你应该使用标准的
%lld,因为 MinGW 遵循的是 GCC 的标准。
unsigned long long int
如果你要打印的是无符号的 long long(即 unsigned long long),格式说明符需要做相应改变。

(图片来源网络,侵删)
unsigned long long的格式说明符是%llu。- 同样,在 MSVC 中是
%I64u。
#include <stdio.h>
int main() {
unsigned long long unsigned_num = 18446744073709551615ULL;
// 标准写法
printf("Unsigned long long: %llu\n", unsigned_num);
// MSVC 写法
// printf("Unsigned long long: %I64u\n", unsigned_num);
return 0;
}
输出:
Unsigned long long: 18446744073709551615
注意这里我们使用了 ULL 后缀来表示无符号 long long 字面量。
总结表格
| 数据类型 | 标准格式说明符 (C99) | MSVC (Visual Studio) 格式说明符 | 字面量后缀 |
|---|---|---|---|
long long / long long int |
%lld |
%I64d |
LL 或 ll |
unsigned long long |
%llu |
%I64u |
ULL 或 ull |
最佳实践建议
- 优先使用
long long,int是多余的。 - 为
long long字面量添加LL后缀,这是好习惯,能避免潜在问题。 - 如果你需要代码在 Windows (MSVC) 和其他平台(如 Linux)上都能编译,请使用预处理器
#ifdef来选择正确的格式说明符,这是最健壮的跨平台解决方案。 - 明确类型:使用
long long表示有符号整数,unsigned long long表示无符号整数,并使用对应的%lld/%llu。
