我有一些编写C代码的古老记忆:
long value = 0;
在糟糕的旧Win16天中,最后value
只被半初始化:即低16位是0
而高16位是内存中该位置的随机位。因此,我有条件写:
long value = 0L;
在C99和/或C ++下这个日龄仍然需要吗?我知道ILP32指定int
和long
都是32位,但假设我们正在使用LP64,其中int
是32位且long
s是64位。是否需要后缀或现代形式的C和C ++是否会将文字隐式地扩展到它们被赋给的变量的长度?
无符号值怎么样?即这需要吗?
unsigned long value = 0UL;
答案 0 :(得分:7)
您提供的示例中不需要它们。但是,在一些有些晦涩难懂的情况下可能需要它们。例如,以下内容可能会产生不同的值:
sizeof(1)
sizeof(1L)
答案 1 :(得分:3)
不再需要这个。您正在描述的行为,如果在程序中而不仅仅是调试器中可见,则是一个错误。
答案 2 :(得分:1)
由于您假设使用32位编译器,因此您可能不需要使用16位编译器时的L,但您可能需要LL,例如:
long long ll;
ll = 1<<32;
gcc -std = c99警告“左移计数&gt; =类型的宽度。”相反,你想要:
ll = 1LL<<32;
另请参阅https://stackoverflow.com/a/8108658/782738,了解C ++ 11和C99标准参考。
答案 3 :(得分:1)
但是wchar_t字符串需要这种表示法,比如
L"I am a wchar_t string."
并且长整数也是......
我想这应该被移除,它没有用(类型是用它的名字声明的,而不是带有一些后缀),但在C ++ 11中仍然支持。
Hm中