2

我对编写 C 代码有一些古老的记忆,例如:

long value = 0;

在糟糕的旧 Win16 日子里,最后value只初始化了一半:即低 16 位是0,高 16 位是内存中那个位置的任何随机位。因此,我变得有条件写:

long value = 0L;

在当今的 C99 和/或 C++ 下,这是否仍然需要?我知道 ILP32 指定int并且long都是 32 位的,但假设我们使用 LP64,其中ints 是 32 位,longs 是 64 位。是否需要后缀,或者现代形式的 C 和 C++ 是否会将文字隐式扩展为分配给它们的变量的长度?

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

unsigned long value = 0UL;
4

4 回答 4

7

您提供的示例中不需要它们。但是,在一些有点深奥的情况下可能需要它们。例如,以下可能会产生不同的值:

sizeof(1)
sizeof(1L)
于 2009-06-10T14:34:29.650 回答
3

不,这不再需要了。您所描述的行为,如果在程序中可见,而不仅仅是调试器,则是一个错误。

于 2009-06-10T14:34:32.270 回答
1

由于您假定使用 32 位编译器,因此您可能不需要像使用 16 位编译器时那样需要 L,但您可能需要 LL,例如:

long long ll;
ll = 1<<32;

gcc -std=c99 警告“左移计数 >= 类型宽度”。相反,你会想要:

ll = 1LL<<32;

有关C++11 和 C99 标准参考,另请参见https://stackoverflow.com/a/8108658/782738 。

于 2012-12-05T21:33:40.257 回答
1

但是 wchar_t 字符串需要这种表示法,例如

L"I am a wchar_t string."

对于 long long 整数,也...

我想这是应该删除的东西,它没有用(类型是用它的名字声明的,而不是用一些后缀声明的),但在 C++11 中仍然支持。

嗯。

于 2014-07-25T11:39:30.207 回答