我已经在网上查看了很多地方,似乎无法找到一个很好的解释,为什么我们应该在分配给C++常量的值之后附加F或L. 例如:
const long double MYCONSTANT = 3.0000000L;
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么这是必要的?类型声明是否意味着分配给MYCONSTANT的值是一个很长的双倍?上面的行与之间有什么区别?
const long double MYCONSTANT = 3.0000000; // no 'L' appended
Run Code Online (Sandbox Code Playgroud)
呼!
以下 C/C++ 代码:
long long foo = -9223372036854775808LL; // -2^63
Run Code Online (Sandbox Code Playgroud)
编译(g++)并带有警告
整数常量太大,以至于它是无符号的。
clang++ 给出了类似的警告。
感谢此错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi ?id= 52661。我现在明白为什么 GCC 发出这个警告了。不幸的是,对错误报告的回应并没有很好地解释这种行为的原因。
问题:
我有一些编写C代码的古老记忆:
long value = 0;
Run Code Online (Sandbox Code Playgroud)
在糟糕的旧Win16天,最后value
只有半初始化:即低16位0
,高16位是内存中该位置的随机位.因此,我有条件写:
long value = 0L;
Run Code Online (Sandbox Code Playgroud)
在C99和/或C++这个时代仍然需要这个吗?我知道ILP32指定int
并且long
都是32位,但是假设我们正在使用LP64,其中int
s是32位,long
s是64位.是否需要后缀或现代形式的C和C++是否会将文字隐式地扩展到它们被赋给的变量的长度?
无符号值怎么样?即这是必需的吗?
unsigned long value = 0UL;
Run Code Online (Sandbox Code Playgroud)