曾经对 float num = 3.14f; 这样的赋值非常疑惑, 其实现在也不明白. 既然说明了是 float 类型, 又何必在 3.14 后面挂个 f 呢? 书上说: int num = 100; 一个整数常量将默认为 int 类型(除非常数有后缀或超出了 int 的范围) double num = 3.14; 一个浮点数常量将默认为 double 类型 并要求: long num = 100L; long long num = 100LL; unsigned long = 100UL; unsigned long long num = 100ULL; float num = 3.14f; 这些后缀是大小写无关的、(U 和 L是)无顺序的; 我反复测试, 看不出没有区别. 我觉得这些东西用于 #define 还说得过去, 用于指定类型的变量有必要吗? 我猜唯一的必要性或许是让编译器少转换一次. 不过知道还是有好处, 以免看不懂别人的代码. 总之, 前人应该自有道理, 希望谁知道能告诉我. 另外, 如果是十六进制或八进制常数, 将从 int、unsigned、long、unsigned long 中自动选择最小的类型.
其他情况:
#include <stdio.h> #include <stddef.h> int main(void) { char c = 'a'; char cs[] = "abc"; wchar_t wc = L'A'; /* 这个 L 也可以省略 */ wchar_t ws[] = L"ABC"; int n1 = 65535; int n2 = 0xFFFF; /* 十六进制 */ int n3 = 0Xffff; /* 大小写都行 */ int n4 = 0177777; /* 八进制 */ printf("%c, %s, %c, %S\n", c, cs, wc, ws); printf("%d, %d, %d, %d\n", n1, n2, n3, n4); getchar(); return 0; }