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

Dav*_*ron 2 c c++ literals

我有一些编写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)

小智 7

您提供的示例中不需要它们.但是,在一些有些晦涩难懂的情况下可能需要它们.例如,以下可能会产生不同的值:

sizeof(1)
sizeof(1L)
Run Code Online (Sandbox Code Playgroud)

  • @Martin:真的吗?当然,在这样一个试图教育读者的网站上,即使是一个简单的是/否问题也需要一些解释. (6认同)