1
blinue 147 天前 2
需要 64 位用 int64_t 就好,现代 C++ 基本淘汰了 long 和 long long
|
3
tool2dx OP @blinue 这是一回事好吧。
你去看看最新的 stdint.h 头文件里,int64_t 就是用 long 和 long long 来定义的。 #if defined(__LP64__) typedef long __int64_t; #else typedef long long __int64_t; #endif typedef __int64_t int64_t; |
4
dnfQzjPBXtWmML 147 天前
用[u]intXX_t 就可以完美保证一致性,不清楚你对 INT64_C 和 int64_t 的偏见是哪来的
|
6
passive 147 天前 via Android
常年开着 -Wlong-long 写代码,
long 的用途只限于 long double 。 |
7
a33291 147 天前
msvc14(vs2022)上定义是这样
typedef long long int64_t; |
8
lunafreya 147 天前
不是一回事, `__LP64__`
|
9
ivvei 147 天前
要精确稳定表示 64 位那就用 int64_t , 不会有任何歧义和不一致。
|
10
StarsunYzL 147 天前 4
标准本身就有保持一致性的 (u)int64_t 来表示 64 位整型,不清楚为啥你非要用 long long 来表示 64 位整型还要保持一致性,这就很尴尬
|
11
inhzus 147 天前
为了避免代码歧义,我一般会用 **u?int64_t** 来表示 64 位整型,这样不管 32 位还是 64 位编译,都能保持一致性
不关心 size ,用 int ,关心 size 用 u?int(16|32|64)_t |
12
xylxAdai 147 天前
都看编译器实现的。不然 long long 一样可以给你用 32 位存
|
13
ho121 147 天前 via Android
@tool2dx 不能只看某一个编译器对 int64_t 的定义。
long long 的问题是,标准没有明确一定是 64 位。而 int64_t 虽然是个宏,却能保证不同编译器的不同实现下,一定被定义成 64 位的。 |
14
zzzlight 147 天前
CPP 就是这样 看编译器看系统环境 不止 long... 这些各种宏搞得人都容易搞混了 这坑前几年踩好多次了,以为是 64 位发现是 32 位
|
15
slack 147 天前 via Android
移植这种代码也是最困难的,这些玩意也是历史遗留下来的玩意没法改。
|