「C言語」の版間の差分
提供: Wikinote
細 (→定数) |
細 (→定数) |
||
行46: | 行46: | ||
|- | |- | ||
! <code>long</code> | ! <code>long</code> | ||
− | | align="right" | 123456789'''L''' | + | | align="right" | <code>123456789'''L'''</code> |
|- | |- | ||
! <code>unsigned</code> | ! <code>unsigned</code> | ||
− | | align="right" | 123'''U''' | + | | align="right" | <code>123'''U'''</code> |
|- | |- | ||
! <code>unsigned long</code> | ! <code>unsigned long</code> | ||
− | | align="right" | 123456789'''UL''' | + | | align="right" | <code>123456789'''UL'''</code> |
|- | |- | ||
! <code>double</code> | ! <code>double</code> | ||
− | | align="right" | 123.456 | + | | align="right" | <code>123.456</code> |
|- | |- | ||
! <code>unsigned double</code> | ! <code>unsigned double</code> | ||
− | | align="right" | 123.456'''L''' | + | | align="right" | <code>123.456'''L'''</code> |
|- | |- | ||
! <code>float</code> | ! <code>float</code> | ||
− | | align="right" | 123.456'''F''' | + | | align="right" | <code>123.456'''F'''</code> |
|- | |- | ||
! 8 進数 | ! 8 進数 | ||
− | | align="right" | '''0'''123 | + | | align="right" | <code>'''0'''123</code> |
|- | |- | ||
! 16 進数 | ! 16 進数 | ||
− | | align="right" | '''0x'''335F | + | | align="right" | <code>'''0x'''335F</code> |
|- | |- | ||
! 16 進数 <code>unsigned long</code> | ! 16 進数 <code>unsigned long</code> | ||
− | | align="right" | '''0x'''12AB'''UL''' | + | | align="right" | <code>'''0x'''12AB'''UL'''</code> |
|- | |- | ||
! 文字定数 | ! 文字定数 | ||
− | | align="right" | 'a' | + | | align="right" | <code>'a'</code> |
|- | |- | ||
! 8 進数ビットパターン | ! 8 進数ビットパターン | ||
− | | align="right" | '\013' | + | | align="right" | <code>'\013'</code> |
|- | |- | ||
! 16 進数ビットパターン | ! 16 進数ビットパターン | ||
− | | align="right" | '\x1A' | + | | align="right" | <code>'\x1A'</code> |
|- | |- | ||
! 文字列定数 | ! 文字列定数 | ||
− | | align="right" | "hello, world" | + | | align="right" | <code>"hello, world"</code> |
|- | |- | ||
|} | |} |
2009年2月3日 (火) 20:45時点における版
C 言語再考。
覚え書き
printf
のフォーマット
% で始まり、変換指定子で終わる。以下のプログラムで実験。
#include <stdio.h> int main(void) { float f; printf("1234567890 1234567890\n"); printf("---------------------\n"); f = 123.456; printf("%f %f\n", f, -f); // デフォルト printf("%.2f %.2f\n", f, -f); // 小数点以下桁 (精度) 指定 printf("%10f %10f\n", f, -f); // 最小幅指定 printf("%10.2f %10.2f\n", f, -f); printf("%010.2f %010.2f\n", f, -f); // 0 で埋める printf("%-10.2f %-10.2f\n", f, -f); // 左揃え printf("%+10.2f %+10.2f\n", f, -f); // 必ず符号をつける printf("%*.2f %*.2f\n", 15, f, 15, -f); // 引数による幅指定 printf("%*3$.2f %*3$.2f\n", f, -f, 20); // 引数による幅指定 (引数指定) printf("%.*3$f %.*3$f\n", f, -f, 10); // 引数による精度指定 (引数指定) return 0; }
実行結果は下記のようになる。
$ gcc -o printf printf.c; ./printf 1234567890 1234567890 --------------------- 123.456001 -123.456001 123.46 -123.46 123.456001 -123.456001 123.46 -123.46 0000123.46 -000123.46 123.46 -123.46 +123.46 -123.46 123.46 -123.46 123.46 -123.46 123.4560012817 -123.4560012817
定数
定数の型 | 例 |
---|---|
long
|
123456789L
|
unsigned
|
123U
|
unsigned long
|
123456789UL
|
double
|
123.456
|
unsigned double
|
123.456L
|
float
|
123.456F
|
8 進数 | 0123
|
16 進数 | 0x335F
|
16 進数 unsigned long
|
0x12ABUL
|
文字定数 | 'a'
|
8 進数ビットパターン | '\013'
|
16 進数ビットパターン | '\x1A'
|
文字列定数 | "hello, world"
|
※大文字、小文字の区別はない。(U, L, X はそれぞれ u, l, x でも同じ。)
- 列挙定数 (
enum
) の初期値は 0。 - 文字列定数はコンパイル時に連結できるので、以下のような書き方も可能である。長い文章を出力するときなどに便利。OSS のソースを見ても、\ で折り返してるケースが多いが、こちらの方がインデントなどなにかと使いやすいように思える。
printf("aaaaaaaaaaaaaaa" "bbbbbbbbbbbbbbb" "ccccccccccccccc\n"); // print "aaaaaaaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccc\n"
その他 (細かいこと)
-
#define
行の末尾にはセミコロンはいらない -
extern
は宣言であって、定義ではない。つまり、領域の確保などは行われない。別ファイルで定義される変数などを利用する際に使う。疑問:ヘッダファイル中でextern
宣言した場合、定義するファイルからそのヘッダをinclude
してもよいのか。
テクニック
下位 8 ビットマスク
x = x & ~0xFF;