相关疑难解决方法(0)

"L"在整数字面的末尾是什么意思?

我有这个常数:

#define MAX_DATE  2958465L
Run Code Online (Sandbox Code Playgroud)

在这个意义上,L的含义是什么?

c++

21
推荐指数
1
解决办法
2万
查看次数

为什么在分配给C++常量的值之后需要附加L或F?

我已经在网上查看了很多地方,似乎无法找到一个很好的解释,为什么我们应该在分配给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++ syntax types constants

15
推荐指数
2
解决办法
1万
查看次数

“整数常量太大,以致于它是无符号的”编译器警告理由

以下 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 发出这个警告了。不幸的是,对错误报告的回应并没有很好地解释这种行为的原因。

问题:

  • 为什么 32/16/8 位有符号整数常量的等效代码没有给出警告?
  • GCC 和 Clang 都给出了此警告,因此这显然是有意的行为,而不仅仅是“为了使其更易于解析”,正如针对错误报告所建议的那样。为什么?
  • 这种行为是 C/C++ 标准强制要求的吗?还有其他标准吗?

c c++ gcc integer clang

11
推荐指数
1
解决办法
7569
查看次数

在C++中声明长文字时需要长后缀和无符号后缀吗?

我有一些编写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,其中ints是32位,longs是64位.是否需要后缀或现代形式的C和C++是否会将文字隐式地扩展到它们被赋给的变量的长度?

无符号值怎么样?即这是必需的吗?

unsigned long value = 0UL;
Run Code Online (Sandbox Code Playgroud)

c c++ literals

2
推荐指数
1
解决办法
3141
查看次数

标签 统计

c++ ×4

c ×2

clang ×1

constants ×1

gcc ×1

integer ×1

literals ×1

syntax ×1

types ×1