From Gossip@caterpillar

C Gossip: 字面常量(Literal Constant)

您 可以在程式中寫下1、1.0、3.14159這樣的數值,這類數值稱之為「字面常量」(Literal contstant),預設程式中若寫下一個整數值,例如1這個數值的話,預設它會是個int型態無正負號的數值,而如果您在程式中寫下1.0,3.14 等小數時,預設它會是double型態的數值,例如下面這個程式所顯示出來的大小分別是int與double的大小:
#include <stdio.h>

int main(void) {
printf("sizeof(1):\t %d\n", sizeof(1));
printf("sizeof(1.0):\t %d\n", sizeof(1.0));
return 0;
}

執行結果:
sizeof(1):       4
sizeof(1.0):     8

整數字面常量可以用8進位、10進位與16進位來表示,一般習慣使用10進位,如果您要使用8進位的字面常量,開 頭加上0就可以了,如果要使用16進位的 字面常量,開頭加上0x,例如下面的程式各顯示10進位制26的8進位與16進位寫法:
#include <stdio.h>

int main(void) {
printf("%d\n", 26);
printf("%d\n", 032);
printf("%d\n", 0x1A);
return 0;
}

由於printf 指定%d輸出整數值時,都會以10進位制顯示,所以上面的程式中三行陳述都會顯示26。

您可以在整數值之後加上L或l,表示該整數值要是long型態,因為l容易與數字1搞混,所以通常使用L,例如1L,您也可以指定為無號整數,可使用U或 u來指定,例如1U,L與U可以同時指定,例如1UL或1LU;對於浮點數的話,則可以在寫下浮點數值時以F或f表示數值要使用float型態,例如 3.14f,也可以使用科學記號,例如20000可以表示為2e4。

字元字面常量則以單引號來包括一個字元,例如'A'、'1'都表示一個字元字面常量,而有一些字元與C中所使用的相同,例如"、'、\等,要在程式中 表現這些字元則要使用escape sequence,即\"、\'、\\,其它還有一些「不可見字元」,也要以escape sequence來表示,下表列出常用的escape sequence:


escape sequence 說明
\a 嗶一聲(alarm)
\n 換行、新行(newline)
\t 水平定位點(horizontal tab)
\v 垂直定位點(vertical tab)
\b 退回一格(backspace)
\r 返回(carriage return)
\f 換頁(formfeed)
\a 嗶聲(alert bell)
\\ 倒斜線(backslash)
\' 單引號
\" 雙引號
\ddd 八進位ASCII碼
\xdd 十六進位ASCII碼

八進位ASCII碼如'\062'則是字元'2',十六進位ASCII碼如"\x48"為字元'H',一個輸出的例子如下所示,以十六進位ASCII碼顯示"2 個HELLO":
#include <stdio.h>

int main(void) {
char c = '\'';
printf("單引號字元 %c \n", c);
printf(" \" \062 個 \x48\x45\x4c\x4c\x4f\x21 \" \n");
return 0;
}

char宣告一個字元 變數,而在printf()中要顯示該變數時,使用格式指定碼(format specifier)%c來指定,執行結果如下:
單引號字元 '
 " 2 個 HELLO! "

更多的格式指定碼之使用,將在 printf() 與 scanf() 中介紹。