2.3 定数 K&R プログラミング言語C

2.3 定数

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%d\n", 1234); /* 整数定数 */
    printf("%ld\n", 1234L); /* long 定数 */
    printf("%d\n", 12345678901234567); /* 大きすぎる整数 */
    printf("%ld\n", 12345678901234567); /* long 定数 */
    printf("%u\n", 1234u); /* 符号無し定数 unsigned */
    printf("%ld\n", 1234ul); /* 符号無し long 定数 */
    printf("%f\n", 1234.0); /* double 定数 */
    printf("%f\n", 1234.0f); /* float 定数 */

    printf("%d\n", 037); /* 31 の 8進表記 */
    printf("%d\n", 0x1f); /* 31 の 16進表記 */
    printf("%lu\n", 0xful); /* 15 の 10進表記 unsigned long 定数 */

    printf("tab%ccharacter.\n", '\011'); /* 水平タブの8進表記 */
    printf("tab%ccharacter.\n", '\x09'); /* 水平タブの16進表記 */

    return 0;
}

実行結果

$ ./const
1234
1234
1567312775
1567312775
1234
1234
1234.000000
1234.000000
31
31
15
tab	string.
tab	string.

文字定数はコンパイル時に連結することができる。

#include <stdio.h>

int main(int argc, char *argv[])
{
    char *str = "hello,"
                " world!\n"
                "this is"
                " a long text.";

    printf("%s\n", str);

    return 0;
}

実行結果

$ ./string
hello, world!
this is a long text.

文字列の配列のサイズと文字列長(strlen による)は '\0' の分だけ異なる。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char str[6];

    str[0] = 'h';
    str[1] = 'e';
    str[2] = 'l';
    str[3] = 'l';
    str[4] = 'o';
    str[5] = '\0';

    printf("%s 's length is %d\n", str, strlen(str));

    return 0;
}

実行結果

$ ./str_length
hello 's length is 5

列挙定数(数え上げ定数)で値を自動的に与える。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    enum boolean { NO, YES };
    enum month { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

    printf("NO => %d, YES => %d\n", NO, YES);

    printf("september is %dth month.\n", SEP);

    return 0;
}

実行結果

$ ./enum
NO => 0, YES => 1
september is 9th month.
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»