C言語入門

1
C言語入門
第2週
プログラミング言語Ⅰ(実習を含む。),
計算機言語Ⅰ・計算機言語演習Ⅰ,
情報処理言語Ⅰ(実習を含む。)
2
explorer の使い方
先週の復習1
3
explorer.exe
• ファイルの操作を行うソフト
• デスクトップもエクスプローラーの一部
デスクトップも「explorer」
これが「explorer」
コントロールパネルも
「explorer」
ここに「explorer」と入力し
ENTERキーを叩いても
explorer が表示できます
4
ポップアップ(popup)メニューの表示
• 表示させたい場所でマウス右クリック
• 例えばデスクトップの何もない場所で
• メニューの右にある三角印
• サブメニューが出る
ポップアップメニュー
サブメニュー
5
ファイルの作成とオープン
• explorer の
• 作成したい場所で
マウス右クリック
• ポップアップメニュー出る
• 新規作成→テキストドキュメント
• 出来たファイルは
適当に名前を付けても良い
• マウス左ダブルクリック
→メモ帳で開かれる
6
フォルダの作成
• 作成したい所で右クリック
• ポップアップメニューで
• →新規作成
• →フォルダ
• 「新しいフォルダ」ができた
7
フォルダを開く
• フォルダアイコンの上で左ダブルクリック
• explorer が開く
開いているフォルダ名
8
ファイルの移動
• 「テキストドキュメント」を
• 「新しいフォルダ」の中に移動
• 「ドラッグ&ドロップ」すれば良い
ドラッグ&ドロップ
移動しました
9
ファイルのコピー
• Ctrl を押したまま 「ドラッグ&ドロップ」
コピーができました
10
ファイルの選択
• ファイルを単純にクリック
• ファイル左側のチェックボックスをクリック
• ファイルを囲むようにドラッグ(複数選択)
選択された
11
ファイルの削除
• 選択したファイル上で右クリック
• →削除
• ファイルを選択して「Delete」キーでも良い
ファイルが消えた
12
CUI作業環境 (terminal)
• フォルダをSHIFT+右クリック
cmd.exe
mintty + bash
13
cmd と bash の主なコマンド
cmd
bash
マニュアル
help [コマンド名]
man [コマンド名]
ファイル一覧
dir
ls
ファイルの表示
type ファイル名
cat [ファイル名]
ディレクトリ移動
cd ディレクトリ名
cd [ディレクトリ名]
ディレクトリ表示
cd
pwd
ファイルコピー
copy コピー元 コピー先
cp コピー元 コピー先
ファイル移動
move コピー元 コピー先
mv コピー元 コピー先
ファイル削除
del ファイル名
rm ファイル名
tab |←
→|
↑
↓
ファイル名の補完
コマンド履歴の再利用
14
教科書 pp.30-31.
ファイルの場所の記述方法(パス)
• 以下の図のフォルダ構成を仮定する
作業フォルダは CLangI2014
15
作業フォルダ
• current directory と言うこともある
ここに表示されているのが
作業フォルダ
教科書 pp.30-31.
Windows の絶対パス、相対パス
• フォルダの階層を \ で区切る
• 現在の作業フォルダは以下の場所
• C:\Users\kou\Desktop\CLangI2014
• 絶対パスはルートデバイスを基準に
• C:\Users\kou\Desktop\CLangI2014\week1\hello.c
• C:\Users\kou\Desktop\CLangII2014\week1\hellogui.c
• 相対パスは現在の作業フォルダを基準に
• week1\hello.c
• ..\CLangII2014\week1\hellogui.c
16
17
Cygwin の絶対パス、相対パス
• ディレクトリの階層を / で区切る
• 現在の作業ディレクトリは以下の場所
• /cygdrive/c/Users/kou/Desktop/CLangI2014
• 絶対パスはルートディレクトリ / を基準に
• /cygdrive/c/Users/kou/Desktop/CLangI2014/week1/hello.c
• /cygdrive/c/Users/kou/Desktop/CLangII2014/week1/hellogui.c
• 相対パスは現在の作業ディレクトリを基準に
• week1/hello.c
• ../CLangII2014/week1/hellogui.c
18
特別なフォルダ名
• 「..」
• 1つ親のディレクトリを意味する
• 「.」
• 現在のディレクトリを意味する
• UNIX では実行ファイルの検索パスに作業ディレ
クトリが含まれない
• 作業ディレクトリ内にある実行ファイルを実行する
際 ./ を実行ファイル名の前に付ける必要がある
19
補足
• フォルダとディレクトリは同じ概念
• Windows 流ではフォルダと呼ぶ
• UNIX 流ではディレクトリと呼ぶ
• /cygdrive は cygwin 特有の仮想ディレクトリ
• Windows のドライブが配置されている
• 通常 UNIX ではパスに : (コロン)を使わないため
• ネットワークドライブもアクセス出来る
• UNC 表記を用いる
• \\fs.cc.yamaguchi-u.ac.jp\YUアカウント名
• //fs.cc.yamaguchi-u.ac.jp/YUアカウント名
20
コマンドの検索パス
• 環境変数 PATH に設定されたパスからコマン
ドを探して実行する
• cmd での確認方法
> echo %PATH%
• 複数のパスは ; (セミコロン)で区切って与える
• bash での確認方法
$ echo $PATH
• 複数のパスは : (コロン)で区切って与える
教科書 p.27.
21
ファイル拡張子の表示
Windows 8 以降
• explorer.exe から
「表示」→「ファイル名拡張子」→ON
ファイル名末尾に
.○○○と表示される
教科書 p.27.
22
ファイル拡張子の表示
Windows 7 以前
• explorer.exe から
• 「Alt」→「ツール」→「オプション」→「表示」
→「登録されている拡張子は表示しない」→OFF
Alt叩くとメニュー出る
ファイル名末尾に
.○○○と出る
23
ファイル拡張子とは?
• ファイルの種類を表している
• アプリケーションとの関連付けに用いられる
•
•
•
•
•
•
•
実行ファイルは .exe や .com
テキスト文書は .txt
Word2007以降は .docx それより前は .doc
Excel2007以降は .xlsx それより前は .xls
PowerPoint2007以降は .pptx それより前は .ppt
圧縮ファイルは .zip .lzh .tgz .cab 等々
等々
• 変更すると開けなくなる
• 普通は変更する必要はない
• メール等で添付されて来たファイルには注意
• 文書ファイルに見えて実行ファイル(実はウィルス)ということも
24
教科書 pp.36-42.
C コンパイラによるコンパイル
• cmd.exe から bcc32 で行った例
C:\Users\kou\Desktop\CLangI2014>dir /B
hello.c
ファイル一覧の表示
C:\Users\kou\Desktop\CLangI2014>bcc32 hello.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hello.c:
警告 W8070 hello.c 6: 関数は値を返すべき(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
コンパイル
C:\Users\kou\Desktop\CLangI2014>dir /B
hello.c
hello.exe
hello.obj
hello.tds
ファイル一覧の表示
C:\Users\kou\Desktop\CLangI2014>hello
hello, world
作成した実行ファイルを実行
25
教科書 p.17.
C コンパイラは何をしているのか?
• デバッグ情報付きコンパイルし逆アセンブル
• .rdata セクション部分
$ gcc -g hello.c
$ objdump -d -S -s a.exe
a.exe:
ファイル形式 pei-x86-64
...
セクション .rdata の内容:
100403000 63796767 636a2d31
100403010 765f5265 67697374
100403020 73000000 00000000
100403030 68656c6c 6f2c2077
100403040 4743433a 2028474e
...
342e646c
6572436c
00000000
6f726c64
55292034
6c005f4a
61737365
00000000
00000000
2e382e31
cyggcj-14.dll._J
v_RegisterClasse
s...............
hello, world....
GCC: (GNU) 4.8.1
セクション .text の逆アセンブル:
文字データの16進表現
...
00000001004010d0 <main>:
#include <stdio.h>
文字データの配置アドレス
main()
{
埋め込まれた文字データ
26
C コンパイラは何をしているのか?
• .text セクション部分
セクション .text の逆アセンブル:
...
00000001004010d0 <main>:
#include <stdio.h>
main()
{
1004010d0:
55
1004010d1:
48
1004010d4:
48
1004010d8:
e8
printf("hello,
1004010dd:
48
1004010e4:
e8
}
1004010e9:
48
1004010ed:
5d
1004010ee:
c3
1004010ef:
90
アセンブラコードを
アセンブルして得られた
マシン語のバイトコード
89 e5
83 ec 20
73 00 00 00
world\n");
8d 0d 4c 1f 00 00
77 00 00 00
83 c4 20
...
配置アドレス
push
mov
sub
callq
%rbp
%rsp,%rbp
$0x20,%rsp
100401150 <__main>
lea
callq
0x1f4c(%rip),%rcx
100401160 <puts>
add
pop
retq
nop
$0x20,%rsp
%rbp
C言語を
コンパイルして得られた
アセンブラコード
# 100403030 <.rdata>
27
C言語入門(変数と定数)
28
基礎知識
29
テキスト編集系ソフトの種類
• テキストエディタ (メモ帳, 秀丸, etc,,,)
• 基本的にプレーンな文字情報のみ、装飾なし
• リッチテキストエディタ (ワードパッド, etc,,,)
• 字体、色、サイズ等の装飾が可能に
• ワードプロセッサ (Word, 一太郎, etc,,,)
• 更に高度な、文書作成支援機能
• DTPツール (InDesign, Publisher, etc,,,)
• 印刷用の版下作成、特に割付へ特化
30
プログラミング向け
テキストエディタの機能
•
•
•
•
•
•
•
•
構文解析機能
シンタックスハイライト機能
行番号表示機能
入力補完機能
マクロ機能
正規表現対応の検索機能
タグジャンプ機能
等々
31
テキストエディタ
• 窓の杜
• オフィス / 文書作成 / テキストエディター
•
http://www.forest.impress.co.jp/library/nav/genre/offc/document_txteditor.html
• 学習・プログラミング / プログラミング / プログラム向けエディター
•
http://www.forest.impress.co.jp/library/nav/genre/stdy/program_progeditor.html
• Vector
• Windows / 文書作成 / テキストエディタ
•
http://www.vector.co.jp/vpack/filearea/win/writing/edit/
32
テキストエディタ
• サクラエディタ
• http://sakura-editor.sourceforge.net/
• xyzzy
• http://xyzzy-022.github.io/
33
統合開発環境
• Microsoft Visual Studio
• http://www.visualstudio.com/ja-jp/
• Eclipse
• Pleiades - Eclipse プラグイン日本語化プラグイン
• http://mergedoc.sourceforge.jp/
• NetBeans
• https://ja.netbeans.org/
34
教科書 p.46.
コメント
•
•
•
•
プログラムとしては解釈されない
後で読む人用に注釈をしておく機能
/* ~ */ の間がコメント
// から行末までがコメント
#include <stdio.h>
緑の部分がコメントとして
扱われている
main()
{
/*
ここがコメント
*/
printf("hello, world\n"); // ここもコメント
}
35
SI接頭辞
名前
キロ(kilo)
メガ(mega)
ギガ(giga)
テラ(tera)
ペタ(peta)
エクサ(exa)
ゼタ(zetta)
ヨタ(yotta)
記号
K
M
G
T
P
E
Z
Y
乗数
10001 =103
10002=106
10003=109
10004=1012
10005=1015
10006=1018
10007=1021
10008=1024
36
2進接頭辞(IEC/IEEE)
名前
キビ(kibi)
メビ(mebi)
ギビ(gibi)
テビ(tebi)
ペビ(pebi)
エクスビ(exbi)
ゼビ(zebi)
ヨビ(yobi)
記号
Ki
Mi
Gi
Ti
Pi
Ei
Zi
Yi
乗数
10241=210
10242=220
10243=230
10244=240
10245=250
10246=260
10247=270
10248=280
37
教科書 pp.50-55.
bit と byte
1bit
• b – bit
• 2進数 1 桁
• 通信速度や IC の容量表記等
• 例:
• 100Mbps (100 Mega bits per seconds)
• B – Byte
• 8bit (半角英数1文字分に相当)
• 記憶メディアの容量表記等
• 例:
• 32GB (32 Giga Bytes)
0
1
1bitの記憶素子には
2進数の1桁つまり
0 または 1 のみ
記憶できる
1bit毎では
単位が小さ過ぎて使い辛い
通常は
8桁を1まとめにして扱う
8bit = 1byte
00011011
8bit = 1byte は 28 = 256 通りの整数を表現可能
符号なし: 0~255
符号あり: −128~127
38
教科書 pp.50-55.
16進数
2進数
10進数
16進数
2進数
10進数
16進数
0b0000
0
0x0
0b1000
8
0x8
0b0001
1
0x1
0b1001
9
0x9
0b0010
2
0x2
0b1010
10
0xa
0b0011
3
0x3
0b1011
11
0xb
0b0100
4
0x4
0b1100
12
0xc
0b0101
5
0x5
0b1101
13
0xd
0b0110
6
0x6
0b1110
14
0xe
0b0111
7
0x7
0b1111
15
0xf
2進数 4桁 → 16進数 1桁 に対応
2進数から変換するとキリが良い
バイト単位のデータを表す際、読み易い
例: 0b0001001000110100
= 4660 = 0x1234
2進数 4桁
2進数 8桁
2進数16桁
2進数32桁
2進数64桁
→
→
→
→
→
16進数 1桁
16進数 2桁
16進数 4桁
16進数 8桁
16進数16桁
39
教科書 pp.50-55.
8 bit 整数の N 進数の表現
2進数
符号なし10進数
符号あり10進数
16進数
0b00000000
0
0
0x00
0b00000001
1
1
0x01
0b00000010
2
2
0x02
0b00000011
3
3
0x03
:
:
:
:
0b01111111
127
127
0x7f
0b10000000
128
-128
0x80
:
:
:
:
0b11111100
252
-4
0xfc
0b11111101
253
-3
0xfd
0b11111110
254
-2
0xfe
0b11111111
255
-1
0xff
符号ありは
ここで
正負が
入れ替わる
符号あり整数の場合は最上位ビットを符号ビットとして扱う(2の補数表現)
40
教科書 pp.50-55.
16 bit 整数の N 進数の表現
2進数
符号なし10進数
符号あり10進数
16進数
0b0000000000000000
0
0
0x0000
0b0000000000000001
1
1
0x0001
0b0000000000000010
2
2
0x0002
0b0000000000000011
3
3
0x0003
:
:
:
:
0b0111111111111111
32767
32767
0x7fff
0b1000000000000000
32768
-32768
0x8000
:
:
:
:
0b1111111111111100
65532
-4
0xfffc
0b1111111111111101
65533
-3
0xfffd
0b1111111111111110
65534
-2
0xfffe
0b1111111111111111
65535
-1
0xffff
符号ありは
ここで
正負が
入れ替わる
符号あり整数の場合は最上位ビットを符号ビットとして扱う(2の補数表現)
41
N bit 整数の最大値・最小値
Bit数
符号あり10進数最小値
符号あり10進数最大値
符号なし10進数最大値
8
-128
127
255
16
-32768
32767
65535
32
-2147483648
2147483647
4294967295
64
-9223372036854775808
9223372036854775807
18446744073709551615
𝑁
−2𝑁−1
2𝑁−1 − 1
2𝑁 − 1
42
符号なし8bit整数の演算
• 整数オーバーフロー
11111111 = 255
+)00000001 =
1
100000000 =
0
有効桁の外に1が溢れた
• 整数アンダーフロー
100000000 =
0
-)00000001 =
1
11111111 = 255
有効桁外の外から1が溢れた
43
符号あり8bit整数の演算
• 整数オーバーフロー
01111111 = 127
+)00000001 =
1
10000000 = -128
符号ビットに1が溢れた
• 整数アンダーフロー
10000000 = -128
-)00000001 =
1
01111111 = 127
符号ビットから1が溢れた
• 2の補数表現
有効桁の外から1を借りてくる
100000000 = 0
-)00000001 = 1
11111111 = -1
11111111 = -1
+)00000001 = 1
100000000 = 0
有効桁の外に1を捨てる
44
RAM (Random Access Memory)
• コンピュータのメインメモリで利用されている
45
教科書 pp.52-56.
メモリの構成
• 1byte単位でアドレスが振られている
• つまり各アドレスには1byteの値を格納出来る
32bitのOSは32bitのアドレス空間
最大232 Bytes=4GiB
64bitのOSは64bitのアドレス空間
最大264 Bytes=16EiB
0x00000000
0x00
0x0000000000000000
0x00
0x00000001
0x00
0x0000000000000001
0x00
0x00000002
0x00
0x0000000000000002
0x00
0x00000003
0x00
0x0000000000000003
0x00
:
:
:
:
0xffffffff
0x00
アドレス
格納値
:
:
0xffffffffffffffff
アドレス
:
:
0x00
格納値
46
大きい値の扱い方
• 複数のアドレスをまとめて変数に割り当てる
:
:
:
:
:
:
0x~00
0x00
0x~01
:
:
0x~00
0x00
0x00
0x~01
0x00
0x~02
0x00
0x~02
0x00
0x~03
0x00
0x~03
0x00
0x~04
0x00
0x~04
0x00
0x~05
0x00
0x~05
0x00
0x~06
0x00
0x~06
0x00
0x~07
0x00
0x~07
0x00
0x~08
0x00
0x~08
0x00
:
:
:
:
8bit
:
:
:
:
16bit
47
大きい値の扱い方
• 複数のアドレスをまとめて変数に割り当てる
:
:
:
:
:
:
:
:
0x~00
0x00
0x~00
0x00
0x~01
0x00
0x~01
0x00
0x~02
0x00
0x~02
0x00
0x~03
0x00
0x~03
0x00
0x~04
0x00
0x~04
0x00
0x~05
0x00
0x~05
0x00
0x~06
0x00
0x~06
0x00
0x~07
0x00
0x~07
0x00
0x~08
0x00
0x~08
0x00
:
:
:
:
32bit
:
:
:
:
64bit
48
教科書 pp.59-61.
変数の宣言、値の代入
• 値を格納する箱のようなもの
int a; // (1) 変数の宣言
a = 10; // (2) 値の代入
// (3)
(1)
10
(2)
(3)
?
?
10
a
a
a
int 型の変数を作り
a という名前を付ける
中身は未定
変数 a に
10 を代入する
変数 a に 10 が
代入された状態に
なっている
49
教科書 pp.59-61.
変数の宣言と初期化
• 宣言
int a = 10; // (1) 変数の宣言と初期化
(1)
10
a
int 型の変数を作り
a という名前を付け
10 を代入する
50
教科書 pp.59-61.
変数
• 文法
データ型
データ型
データ型
データ型
変数名;
// 変数の宣言
変数名=初期代入値;// 変数の宣言と初期化
変数名1, 変数名2; // 複数の変数の宣言
変数名1=初期代入値1, 変数名2=初期代入値2;
// 複数の変数の宣言と初期化
変数名 = 値;
// 値の代入
51
教科書 p.54.
リテラル
• ソースコードに直接記述された値
• 数値、文字列等
wavtest.c
//...
int main(int argc, char *argv[])
{
if (argc < 4) {
printf("Usage: %s output_file micro_sec MIDI_note_No\n\n", argv[0]);
return EXIT_FAILURE;
}
FILE *fp;
if (fp = fopen(argv[1], "wb")) {
fwrite_wav(44100, atoi(argv[2]), atoi(argv[3]), fp);
fclose(fp);
}
return EXIT_SUCCESS;
}
赤字で示したような部分が
リテラルに当たる
52
教科書 pp.53-55.
整数のデータ型
• char, unsigned char
• 1バイト、局所的な文字セット内に1文字を保持し得る
• short, unsigned short
• 少なくとも16ビット
• int, unsigned int
• 少なくとも16ビット
• 通常ホスト計算機の自然な整数サイズ
• 現在は 32 or 64 ビットであることが多い
• long, unsigned long
コンパイルする環境により
使える値の最大値・最小値が
異なる!
• 少なくとも32ビット
• 明確にビット数は定められていない
• 割り当てビット数の大小関係は short <= int <=long
• 型の前に unsigned を付けると整数型になる
53
整定数のリテラル
• 何も指定しないと int 型
• 末尾に接尾子(U, L)を付けると型指定される
int
long
unsigned int
unsigned long
i
l
ui
ul
=
=
=
=
1234;
1234L;
1234U;
1234UL;
//
//
//
//
int 型
long 型
unsigned int 型
unsigned long 型
54
教科書 p.54.
C言語のN進数リテラル
•
•
•
•
0b~
2進数リテラル(C++14の仕様*1)
0~
8進数リテラル
0x~
16進数リテラル
*1: 少なくとも gcc4.3, Clang3.2 では実装済み
• 古いコンパイラでは2進数リテラルは使えない
int
int
int
int
dec
bin
oct
hex
=
=
=
=
100;
0b100;
0100;
0x100;
// 10進数の100
// 2進数の100=10進数の 4
// 8進数の100=10進数の 64
// 16進数の100=10進数の256
55
教科書 pp.55-56.
浮動小数点数のデータ型
• float
• double
• long double
単精度浮動小数点数
倍精度浮動小数点数
拡張精度の浮動小数点数
56
教科書 pp.55-56.
浮動小数点数とは
• IEEE754
• http://ja.wikipedia.org/wiki/IEEE_754
• 以下のようなに表現する方法
±仮数部 × 2指数部
ビット数
符号
指数部
仮数部
単精度
32bit
1bit
8bit
23bit
倍精度
64bit
1bit
11bit
53bit
四倍精度
128bit
1bit
15bit
112bit
指数部の値で
小数点の位置が移動するので
浮動小数点と呼ばれる
57
浮動小数点数定数のリテラル
• 何も指定しないと double 型
• 末尾に接尾子(F, L)を付けると型指定される
• 1.234E5 のような書き方も出来る(指数表現)
• これは1.234 × 105 を意味する
float
f = 1234F;
double
d = 1234;
long double ld = 1234L;
double
e
// float 型
// double 型
// long double 型
= 1.234E5; // double 型の 123400
58
教科書 p.51.
ASCII文字コード表
上
位
4
ビ
ッ
ト
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
下位4ビット
0 1 2
NUL SOH STX
DLE DC1 DC2
SP ! "
0 1 2
@ A B
P Q R
` a b
p q r
3
ETX
DC3
#
3
C
S
c
s
4
EOT
DC4
$
4
D
T
d
t
5
ENQ
NAK
%
5
E
U
e
u
6
ACK
SYN
&
6
F
V
f
v
7
BEL
ETB
'
7
G
W
g
w
8
BS
CAN
(
8
H
X
h
x
9 A B C D E F
HT LF VT FF CR SO SI
EM SUB ESC → ← ↑ ↓
) * + , - . /
9 : ; < = > ?
I J K L M N O
Y Z [ \ ] ^ _
i j k l m n o
y z { | } ~ DEL
http://ja.wikipedia.org/wiki/ASCII
赤字は制御コード
教科書 p.51.
59
制御コード
HEX
Abbr
ctrl
eseq
Name
Hex
Abbr
ctrl
eseq
0x00
NUL
^@
\0
Null
0x10
DLE
^P
Data Link Escape
0x01
SOH
^A
Start of Heading
0x11
DC1
^Q
Device Control 1
0x02
STX
^B
Start of Text
0x12
DC2
^R
Device Control 2
0x03
ETX
^C
End of Text
0x13
DC3
^S
Device Control 3
0x04
EOT
^D
End of Transmission
0x14
DC4
^T
Device Control 4
0x05
ENQ
^E
Enquiry
0x15
NAK
^U
Negative Acknowledgement
0x06
ACK
^F
Acknowledgement
0x16
SYN
^V
Synchronous idle
0x07
BEL
^G
\a
Bell
0x17
ETB
^W
End of Transmission Block
0x08
BS
^H
\b
Back Space
0x18
CAN
^X
Cancel
0x09
HT
^I
\t
Horizontal Tab
0x19
EM
^Y
End of Medium
0x0a
LF
^J
\n
Line Feed
0x1a
SUB
^Z
Substitute
0x0b
VT
^K
\v
Vertical Tab
0x1b
ESC
^[
0x0c
FF
^L
\f
Form Feed
0x1c
FS
^\
File Separator
0x0d
CR
^M
\r
Carriage Return
0x1d
GS
^]
Group Separator
0x0e
SO
^N
Shift Out
0x1e
RS
^^
Record Separator
0x0f
SI
^O
Shift In
0x1f
US
^_
Unit Separator
0x20
SP
Space
0x7f
DEL
^?
Delete
\e
Name
Escape
60
教科書 p.56.
文字定数のリテラル
• 1文字を単一の引用符(')で囲む 単一の引用符(')は
+
• char型の値になる
↑Shift
char
char
char
char
a
lf
vt
cr
=
=
=
=
'a';
'\012';
'\x0b';
'\r';
'
7
//「a」の文字コード0x61
//改行の文字コード0x0aを8進数で
//垂直タブの文字コード0x0bを16進数で
//復帰の文字コード0x0dを
//エスケープシーケ1ンスで
61
教科書 p.56.
エスケープシーケンス
\a
\b
\f
\n
\r
\t
\v
警告(ベル)文字
バックスペース
改頁(フォームフィード)
改行
復帰
水平タブ
垂直タブ
これらの表記は、
1文字(=1バイト)の値を表す。
\\
\?
\'
\"
\ooo
\xhh
バックスラッシュ
疑問符
単一引用符
二重引用符
8進数 ooo (*1)
16進数 hh (*2)
(*1) ooo は1桁ないし
3桁の8進数を取る
(*2) hh は1桁あるいは
2桁の16進数を取る
62
備考
幅広文字定数のリテラル
• char型では表せない拡張文字セット用
• 文字定数の前に L を付ける
• wchar_t型の値になる
wchar_t hira_a = L'あ'; // 「あ」の文字コードU+3043?
Wikipedia / JIS_X_0213非漢字一覧#1面4区
http://ja.wikipedia.org/wiki/JIS_X_0213非漢字一覧#1.E9.9D.A24.E5.8C.BA
63
教科書 pp.44, 96-99.
文字列定数のリテラル
• 0個以上の文字を二重引用符(")で囲む
• char型の配列になる(後述)
二重引用符(")は
↑Shift
+
char emp[] = "";
// 空の文字列
char str[] = "I am a string";
// 文字列
char cat[] = "hello, " "world"; // "hello, world" と同じ
// 連続した文字定数リテラルはコンパイル時に連結される
"
2