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
© Copyright 2024 ExpyDoc