新しいC言語の教科書
新しいC言語の教科書
本について
[目次]
- はじめに
- 第1章 準備
- 第2章 C言語プログラムの基本
- 第3章 変数や定数と型
- 第4章 式と型変換
- 第5章 基本的な演算子
- 第6章 制御構造
- 第7章 関数とプログラム
- 第8章 前処理
- 第9章 配列とポインタ
- 第10章 関数とポインタ
- 第11章 動的記憶域確保
- 第12章 文字と文字列
- 第13章 型宣言の読み方・書き方
- 第14章 多次元配列と型
- 第15章 関数と型
- 第16章 構造体と共用体
- 第17章 型の別名
- 第18章 型の修飾
- 第19章 高度な機能
- 第20章 おわりに
2015年5月28日 0.9.1版
- 図9.3の誤りを訂正
詳しい更新内容についてはサポートサイトをご覧下さい。(「サポート」メニューから「新しいC言語の教科書」>「更新情報:0.9.1版」)
目次
-
はじめに
- 本書の利用法
- 本書が扱う範囲
- 表記法
- サポート
- 本書を教科書としてお使い下さる先生方へ
- 謝辞
-
1. 準備
-
1.1 C言語でできること
- 1.1.1 プログラムとは
- 1.1.2 プログラムの基本動作
- 1.1.3 演習
-
1.2 C言語を使うのに必要なもの
- 1.2.1 ソフトウェア
- 1.2.2 ハードウェアとOS
-
1.3 エディタ
- 1.3.1 プログラムはテキストファイル
- 1.3.2 プログラムを書くためのソフトウェア — エディタ
-
1.4 エディタを選ぶ
- 1.4.1 独立型のエディタを使うか、IDE を使うか
- 1.4.2 独立型エディタの紹介
- 1.4.3 IDE を使うなら
- 1.4.4 演習
-
1.5 コンパイラ
- 1.5.1 コンパイルとコンパイラ
- 1.5.2 言語処理系
-
1.6 コンパイラの入手
- 1.6.1 Linux (UNIX)
- 1.6.2 OS X
- 1.6.3 Windows
- 1.6.4 演習
-
1.7 ライブラリ
- 1.7.1 ライブラリとは
- 1.7.2 C言語の標準ライブラリが提供する機能
- 1.7.3 C言語ライブラリの入手
-
1.8 プログラム作成から実行まで
- 1.8.1 独立型エディタで作成してコマンドで動かす
- 1.8.2 IDE 内でコンパイルと実行をする
- 1.8.3 本書では…
-
1.9 やってみよう
- 1.9.1 手順
- 1.9.2 演習
-
1.10 空白や改行
- 1.10.1 空白文字の数にあまり意味はない
- 1.10.2 空白文字の仲間たち
- 1.10.3 「#」で始まる行は特別
- 1.10.4 空白類文字がどうしても必要なとき、そうでないとき
- 1.10.5 空白を使って見やすくコードを書こう
- 1.10.6 演習
-
1.11 字下げとタブ
- 1.11.1 字下げ
- 1.11.2 タブ文字を使った字下げ
- 1.11.3 タブ文字による字下げの問題
- 1.11.4 演習
-
1.12 日本語を使うときの注意*
- 1.12.1 コンパイラによる制約*
- 1.12.2 コンパイラへの指示*
-
1.13 文字コードの指定*
- 1.13.1 基本文字と拡張文字*
- 1.13.2 文字コードを合わせよう*
- 1.13.3 うまく日本語が使えたら*
- 1.13.4 演習
-
1.14 エディタの設定*
- 1.14.1 おすすめの設定*
- 1.14.2 演習
-
1.1 C言語でできること
-
2. C言語プログラムの基本
-
2.1 基本動作 (1):上から順に
- 2.1.1 API を使った入出力
- 2.1.2 文
- 2.1.3 演習
-
2.2 基本動作 (2):場合分け
- 2.2.1 if 文は文を含む文
- 2.2.2 演習
-
2.3 基本動作 (3):繰返し
- 2.3.1 C言語プログラミングの基本
- 2.3.2 演習
-
2.4 API の使い方
- 2.4.1 API の呼び出し
- 2.4.2 API とヘッダファイル
- 2.4.3 API の使用法の表現
- 2.4.4 演習
-
2.5 エラーと異常動作
- 2.5.1 コンパイルエラー
- 2.5.2 実行時エラー
- 2.5.3 異常動作
- 2.5.4 バグ
- 2.5.5 デバッグ表示
- 2.5.6 演習
-
2.1 基本動作 (1):上から順に
-
3. 変数や定数と型
-
3.1 変数
- 3.1.1 変数とは
- 3.1.2 データ型
- 3.1.3 変数の宣言
- 3.1.4 演習
-
3.2 整数型
- 3.2.1 整数型の大きさと表現できる範囲
- 3.2.2 符号付き整数型と符号なし整数型
- 3.2.3 整数型の一覧
- 3.2.4 変数の大きさを知る
- 3.2.5 整数型の順位*
- 3.2.6 「int」は省略できる*
- 3.2.7 バイト順序**
- 3.2.8 演習
-
3.3 浮動小数点数型
- 3.3.1 浮動小数点数とは
- 3.3.2 float 型、double 型、long double 型
- 3.3.3 型の大きさを知る
- 3.3.4 演習
-
3.4 浮動小数点数の誤差*
- 3.4.1 誤差の発生*
- 3.4.2 誤差を考慮した比較*
- 3.4.3 演習*
-
3.5 数値の入出力
- 3.5.1 整数の入出力
- 3.5.2 浮動小数点数の入出力
- 3.5.3 その他
- 3.5.4 演習
-
3.6 識別子
- 3.6.1 識別子のつけ方
- 3.6.2 予約語
- 3.6.3 識別子として使える語の例
- 3.6.4 識別子として望ましくない語の例
- 3.6.5 演習
-
3.7 数値の定数
- 3.7.1 整数の定数
- 3.7.2 浮動小数点数の定数
- 3.7.3 演習
-
3.8 列挙型*
- 3.8.1 型は値の集合**
- 3.8.2 列挙型の基本*
- 3.8.3 整数としての使い方**
- 3.8.4 演習
-
3.9 論理型**
- 3.9.1 論理型への変換**
- 3.9.2 論理型と int 型**
- 3.9.3 演習
-
3.1 変数
-
4. 式と型変換
-
4.1 式
- 4.1.1 式の評価
- 4.1.2 式は式を作る
- 4.1.3 式は型を持つ
- 4.1.4 評価の順序*
- 4.1.5 演習
-
4.2 明示的に型を変換する
- 4.2.1 代入で型を変換する
- 4.2.2 キャストで型を変換する
- 4.2.3 その他の方法*
- 4.2.4 演習
-
4.3 数値の型変換*
- 4.3.1 整数型から整数型への変換*
- 4.3.2 整数型から浮動小数点数型への変換*
- 4.3.3 浮動小数点数型から整数型への変換*
- 4.3.4 浮動小数点数型から浮動小数点数型への変換*
- 4.3.5 演習
-
4.4 演算子の優先度と結合性
- 4.4.1 C言語の演算子一覧
- 4.4.2 演算子の優先度
- 4.4.3 演算子の結合性
- 4.4.4 グループ化のための括弧
- 4.4.5 演習
-
4.5 オペランドの型を揃える*
- 4.5.1 通常の算術型変換*
- 4.5.2 よく使う型の間の変換*
- 4.5.3 演習
-
4.6 整数拡張と通常の算術型変換**
- 4.6.1 数値演算のときの自動的な型変換**
- 4.6.2 整数拡張**
- 4.6.3 通常の算術型変換**
- 4.6.4 演習
-
4.7 代入と左辺値**
- 4.7.1 代入の右辺と左辺の違い**
- 4.7.2 代入演算子と左辺値・右辺値**
- 4.7.3 代入式の評価**
- 4.7.4 式の左辺値が必要な場合**
- 4.7.5 用語について**
- 4.7.6 演習
-
4.1 式
-
5. 基本的な演算子
-
5.1 四則演算、剰余、符号の操作
- 5.1.1 演習
-
5.2 大小関係、等しいかどうか
- 5.2.1 0 < x < 2 はうまくいかない
- 5.2.2 演習
-
5.3 論理演算子
- 5.3.1 演習
-
5.4 ビット単位の演算
- 5.4.1 ビット単位の論理演算
- 5.4.2 ビットシフト演算
- 5.4.3 ビット操作のやり方
- 5.4.4 演習
-
5.5 複合代入
- 5.5.1 演習
-
5.6 1増やす、1減らす
- 5.6.1 x++ と ++x
- 5.6.2 x++ や ++x という式の型*
- 5.6.3 演習
-
5.7 条件演算*
- 5.7.1 評価順序と型変換*
- 5.7.2 濫用に注意*
- 5.7.3 演習
-
5.8 コンマ*
- 5.8.1 演習
-
5.9 sizeof 演算子
- 5.9.1 演習
-
5.10 副作用に注意*
- 5.10.1 ひとつの式に副作用を入れすぎない*
- 5.10.2 副作用完了点**
- 5.10.3 まとめ**
- 5.10.4 演習
-
5.1 四則演算、剰余、符号の操作
-
6. 制御構造
-
6.1 文とブロック、制御構造
- 6.1.1 文
- 6.1.2 ブロック
- 6.1.3 制御構造
- 6.1.4 演習
-
6.2 if 文による場合分け
- 6.2.1 ぶらぶら else に注意しよう
- 6.2.2 演習
-
6.3 switch 文による場合分け
- 6.3.1 演習
-
6.4 while 文による繰返し
- 6.4.1 演習
-
6.5 for 文による繰返し
- 6.5.1 for 文での変数宣言
- 6.5.2 式の書き方と無限ループ
- 6.5.3 演習
-
6.6 do 文による繰返し
- 6.6.1 演習
-
6.7 繰返しの制御
- 6.7.1 break 文
- 6.7.2 continue 文
- 6.7.3 演習
-
6.8 繰返し構造の使い分け*
- 6.8.1 基本的な使い分け方*
- 6.8.2 演習
-
6.9 goto 文による飛び越し*
- 6.9.1 goto 文とラベル*
- 6.9.2 goto が役立つ場合*
- 6.9.3 goto の除去**
- 6.9.4 演習
-
6.1 文とブロック、制御構造
-
7. 関数とプログラム
-
7.1 C言語の関数の基本
- 7.1.1 数学の関数とC言語の関数
- 7.1.2 仮引数と実引数
- 7.1.3 関数の呼出しと関数からの戻り
- 7.1.4 引数の値渡し
- 7.1.5 演習
-
7.2 関数の引数と戻り値の型
- 7.2.1 引数の型、戻り値の型
- 7.2.2 関数の呼出し・戻りと式の評価
- 7.2.3 型を合わせよう
- 7.2.4 型が合っていないと型変換が起きる*
- 7.2.5 演習
-
7.3 関数の実行
- 7.3.1 関数の本体の実行
- 7.3.2 main 関数
- 7.3.3 関数の役割
- 7.3.4 演習
-
7.4 関数の引数と戻り値の void 型
- 7.4.1 引数の void 型
- 7.4.2 戻り値の void 型
- 7.4.3 演習
-
7.5 関数の型と宣言
- 7.5.1 関数の型
- 7.5.2 関数の宣言
- 7.5.3 関数宣言の位置
- 7.5.4 関数宣言の役割
- 7.5.5 演習
-
7.6 自動変数と再帰呼出し
- 7.6.1 自動変数
- 7.6.2 再帰呼出しと自動変数*
- 7.6.3 演習
-
7.7 レジスタ変数*
- 7.7.1 レジスタ変数とは*
- 7.7.2 自動変数のための予約語 auto*
- 7.7.3 レジスタ変数についての制約*
- 7.7.4 レジスタ変数の使い方*
- 7.7.5 演習
-
7.8 外部変数
- 7.8.1 外部変数とは
- 7.8.2 外部変数の生存期間
- 7.8.3 外部変数の使い方
- 7.8.4 外部変数の定義と宣言
- 7.8.5 演習
-
7.9 C言語プログラムの構造
- 7.9.1 ソースファイルの基本構造
- 7.9.2 コンパイルとリンク
- 7.9.3 分割コンパイル
- 7.9.4 演習
-
7.10 ファイル外部への参照
- 7.10.1 外部変数があるプログラムを分割する
- 7.10.2 演習
-
7.11 変数の初期化
- 7.11.1 変数の初期化の仕方
- 7.11.2 初期化と代入の違い
- 7.11.3 初期化の右辺に許される式
- 7.11.4 演習
-
7.12 静的変数
- 7.12.1 静的変数とは
- 7.12.2 静的変数の領域確保と初期化のタイミング
- 7.12.3 演習
-
7.13 変数の分類
- 7.13.1 有効範囲と生存期間による分類
- 7.13.2 有効範囲が重なっている場合
- 7.13.3 演習
-
7.14 static 付き関数
- 7.14.1 演習
-
7.15 インライン関数**
- 7.15.1 関数呼出しのオーバヘッドを省く**
- 7.15.2 インライン展開**
- 7.15.3 複数のファイルで同じインライン関数を使う**
- 7.15.4 外部的インライン関数と内部的インライン関数**
- 7.15.5 inline は単なるヒント**
- 7.15.6 インライン関数を使うときの注意**
- 7.15.7 演習
-
7.1 C言語の関数の基本
-
8. 前処理
-
8.1 前処理の概要
- 8.1.1 前処理の役割
- 8.1.2 行の連結
- 8.1.3 演習
-
8.2 マクロ
- 8.2.1 マクロとは
- 8.2.2 マクロの定義と展開
- 8.2.3 引数付きマクロ
- 8.2.4 マクロと列挙定数*
- 8.2.5 引数付きマクロとインライン関数*
- 8.2.6 マクロ定義の取り消し
- 8.2.7 処理系によって定義されているマクロ*
- 8.2.8 演習
-
8.3 マクロ定義での文字列処理**
- 8.3.1 マクロ本体で使える文字列演算子**
- 8.3.2 演習
-
8.4 可変個引数マクロ**
- 8.4.1 実引数に合わせて仮引数の個数を変える**
- 8.4.2 固定引数はなくてもいい**
- 8.4.3 演習
-
8.5 ファイルの取込み*
- 8.5.1 #include によるファイルの取込み*
- 8.5.2 ヘッダファイルの書き方*
- 8.5.3 演習
-
8.6 条件付きコンパイル*
- 8.6.1 条件付きコンパイルの役割*
- 8.6.2 条件付きコンパイルのための指令*
- 8.6.3 defined 演算子と #ifdef、#ifndef*
- 8.6.4 ちょっとしたコツ:#if 0 によるコメント化*
- 8.6.5 演習
-
8.7 その他の前処理指令**
- 8.7.1 #error 指令**
- 8.7.2 #line 指令**
- 8.7.3 #pragma 指令**
- 8.7.4 演習
-
8.1 前処理の概要
-
9. 配列とポインタ
-
9.1 配列の基本
- 9.1.1 整数値で変数を選ぶ
- 9.1.2 配列の宣言と要素へのアクセス
- 9.1.3 配列名と要素数
- 9.1.4 演習
-
9.2 配列の初期化
- 9.2.1 配列の初期化の書き方
- 9.2.2 初期化の応用*
- 9.2.3 初期値として書ける式
- 9.2.4 演習
-
9.3 多次元配列の基本
- 9.3.1 2次元配列
- 9.3.2 2次元配列の初期化
- 9.3.3 3次元以上の多次元配列
- 9.3.4 演習
- 9.4 ポインタの基本
-
9.5 ポインタの原理
- 9.5.1 ポインタの型
- 9.5.2 *p は変数のようなもの
- 9.5.3 演算子 * と &
- 9.5.4 まとめ
- 9.5.5 演習
-
9.6 ポインタの型と演算子
- 9.6.1 ポインタの型と値
- 9.6.2 アドレス演算 &
- 9.6.3 間接演算「*」
- 9.6.4 アドレス演算と間接演算は逆*
- 9.6.5 演習
-
9.7 ポインタの役割
- 9.7.1 演習
-
9.8 ポインタと配列
- 9.8.1 配列要素をポインタで指す
- 9.8.2 ポインタに整数を足す・引く
- 9.8.3 ポインタは配列と同じように使える
- 9.8.4 ポインタ変数のインクリメントによる配列アクセス
- 9.8.5 配列はインクリメント・デクリメントできない
- 9.8.6 演習
-
9.9 配列演算子とポインタ*
- 9.9.1 ポインタ値+1が次の要素を指す仕組み*
- 9.9.2 配列はどう扱われるか*
- 9.9.3 配列演算子の評価**
- 9.9.4 配列演算子の定義**
- 9.9.5 ポインタに対する演算*
- 9.9.6 演習
-
9.10 void 型へのポインタ
- 9.10.1 void 型
- 9.10.2 void 型へのポインタ
- 9.10.3 ポインタの変換と境界調整**
- 9.10.4 演習
-
9.11 空ポインタ
- 9.11.1 空ポインタの使い方
- 9.11.2 空ポインタを表わすマクロ NULL
- 9.11.3 空ポインタはゼロか**
- 9.11.4 演習
-
9.12 ポインタへのポインタ*
- 9.12.1 ポインタ変数へのポインタ*
- 9.12.2 ポインタの配列*
- 9.12.3 演習
-
9.1 配列の基本
-
10. 関数とポインタ
-
10.1 関数の引数にポインタを渡す
- 10.1.1 演習
-
10.2 関数の引数に配列を渡す*
- 10.2.1 配列を実引数として渡すとポインタが渡る*
- 10.2.2 配列の大きさを知らせる*
- 10.2.3 演習
-
10.3 関数へのポインタ*
- 10.3.1 関数へのポインタを得る*
- 10.3.2 関数へのポインタの型**
- 10.3.3 関数へのポインタの伝統的な使い方**
- 10.3.4 演習
-
10.4 関数呼出し式の評価*
- 10.4.1 関数の呼出し*
- 10.4.2 関数へのポインタを得る*
- 10.4.3 関数呼出しにおける副作用完了点**
- 10.4.4 演習
-
10.5 関数の引数宣言の省略**
- 10.5.1 関数ポインタ変数の宣言での引数の省略**
- 10.5.2 関数宣言での引数の省略**
- 10.5.3 まとめ**
- 10.5.4 演習
-
10.6 関数へのポインタの相互変換**
- 10.6.1 戻り値の型の違う関数へのポインタをひとつの変数で扱う**
- 10.6.2 演習
-
10.7 可変個の関数引数**
- 10.7.1 引数の個数が可変である関数**
- 10.7.2 可変個引数関数の宣言**
- 10.7.3 可変個引数関数の定義**
- 10.7.4 実引数拡張に注意**
- 10.7.5 演習
-
10.1 関数の引数にポインタを渡す
-
11. 動的記憶域確保*
-
11.1 動的確保の基本*
- 11.1.1 動的記憶域確保とは*
- 11.1.2 基本的な使い方*
- 11.1.3 動的に確保された領域の生存期間*
- 11.1.4 演習
-
11.2 伸びる配列を作る*
- 11.2.1 realloc 関数*
- 11.2.2 伸びる配列の実装*
- 11.2.3 演習
-
11.1 動的確保の基本*
-
12. 文字と文字列
-
12.1 文字コード
- 12.1.1 文字コードとコード値
- 12.1.2 演習
-
12.2 文字定数
- 12.2.1 文字定数の表現
- 12.2.2 バックスラッシュ表記
-
12.3 char 型
- 12.3.1 char 型は1バイト
- 12.3.2 演習
-
12.4 1文字ずつの処理
- 12.4.1 1文字ずつの処理の基本形
- 12.4.2 演習
-
12.5 文字列
- 12.5.1 文字へのポインタと文字列
- 12.5.2 演習
-
12.6 文字列の入出力
- 12.6.1 文字列入力 fgets
- 12.6.2 文字列出力 fputs
- 12.6.3 演習
-
12.7 文字列と関数の引数
- 12.7.1 文字列を関数に渡す
- 12.7.2 関数から文字列を引数にもらう
- 12.7.3 演習
-
12.8 文字列リテラル
- 12.8.1 文字列リテラルとは
- 12.8.2 文字列リテラルは読出し専用の無名の配列*
- 12.8.3 文字列リテラルを使った初期化
- 12.8.4 文字列リテラルの連結
- 12.8.5 演習
-
12.9 ごみポインタ*
- 12.9.1 初期化されていない自動変数*
- 12.9.2 生存期間の終わった領域を指しているポインタ*
- 12.9.3 演習
-
12.10 文字の2次元配列
- 12.10.1 文字の2次元配列の作り方・使い方
- 12.10.2 演習
-
12.11 文字列のベクタ
- 12.11.1 文字列のベクタとは
- 12.11.2 文字列ベクタの型と初期化
- 12.11.3 空ポインタの利用
- 12.11.4 演習
-
12.12 コマンド行引数
- 12.12.1 main 関数の仮引数
- 12.12.2 演習
-
12.13 関数名を表わす文字列**
-
12.13.1 自動的に作られる変数
__
func__
** - 12.13.2 演習
-
12.13.1 自動的に作られる変数
-
12.14 かなや漢字を扱う*
- 12.14.1 コンパイラの文字コードを合わせる*
- 12.14.2 多バイト文字のまま扱う方法*
- 12.14.3 ワイド文字を使う方法*
- 12.14.4 どの方法を使えばいいか*
- 12.14.5 演習
-
12.15 ワイド文字**
- 12.15.1 ワイド文字とワイド文字列**
- 12.15.2 多バイト文字とワイド文字の間の入出力時の変換**
- 12.15.3 ワイド文字を扱う API**
- 12.15.4 まとめ**
- 12.15.5 演習
-
12.1 文字コード
-
13. 型宣言の読み方・書き方*
-
13.1 C言語の型宣言の基本*
- 13.1.1 演習
- 13.2 型宣言の読み方**
-
13.3 型宣言の書き方**
- 13.3.1 データ構造を作る**
- 13.3.2 API を呼び出す**
- 13.3.3 演習
-
13.1 C言語の型宣言の基本*
-
14. 多次元配列と型**
-
14.1 配列とポインタの関係**
- 14.1.1 文字列ベクタの各要素を指すポインタの宣言
- 14.1.2 仮引数の配列宣言
- 14.1.3 演習
-
14.2 多次元配列の実際**
- 14.2.1 多次元配列のメモリ内配置**
- 14.2.2 多次元配列へのアクセス**
- 14.2.3 演習
-
14.3 多次元配列の型**
- 14.3.1 演習
-
14.4 多次元配列とポインタ**
- 14.4.1 演習
-
14.5 配列リテラル**
- 14.5.1 演習
-
14.6 1次元配列を多次元配列として使う**
- 14.6.1 添字をその都度計算する方法
- 14.6.2 型を変換する方法**
- 14.6.3 演習
-
14.1 配列とポインタの関係**
-
15. 関数と型**
-
15.1 関数の複雑な型を読む**
- 15.1.1 引数宣言を分けて考えよう**
- 15.1.2 関数呼出し式の型に注目する**
- 15.1.3 演習
-
15.2 関数の型を書く**
- 15.2.1 例:電卓プログラム**
- 15.2.2 演習
-
15.1 関数の複雑な型を読む**
-
16. 構造体と共用体
-
16.1 構造体の基本
- 16.1.1 配列と構造体
- 16.1.2 構造体の型
- 16.1.3 タグとメンバ名
- 16.1.4 構造体の利用
- 16.1.5 構造体の初期化
- 16.1.6 演習
-
16.2 構造体の内部構造*
- 16.2.1 演習
-
16.3 構造体型をヘッダファイルで宣言する
- 16.3.1 演習
-
16.4 構造体リテラル**
- 16.4.1 演習
-
16.5 構造体の配列
- 16.5.1 構造体の配列の宣言と利用
- 16.5.2 構造体の配列の初期化
- 16.5.3 演習
-
16.6 構造体へのポインタ
- 16.6.1 演習
-
16.7 構造体を関数とやり取りする*
- 16.7.1 値としてやり取りする*
- 16.7.2 ポインタを介してやり取りする*
- 16.7.3 その他の方法*
- 16.7.4 演習
-
16.8 ビットフィールド*
- 16.8.1 演習
-
16.9 ビットフィールドの内部構造**
- 16.9.1 struct bill の構造**
- 16.9.2 名前のないビットフィールド**
- 16.9.3 次の語に送られる場合**
- 16.9.4 次の語に送りたい場合**
- 16.9.5 演習
-
16.10 自己参照的構造体*
- 16.10.1 自分自身を含む構造体は作れない*
- 16.10.2 演習
-
16.11 共用体の基本
- 16.11.1 データを入れたメンバを使ってデータを取り出す
- 16.11.2 どのメンバで最後に入れたか知る方法はない
- 16.11.3 コード例
- 16.11.4 演習
-
16.12 共用体の利用法*
- 16.12.1 演習
-
16.13 フレキシブル配列メンバ**
- 16.13.1 フレキシブル配列メンバの宣言**
- 16.13.2 フレキシブル配列メンバのための領域の確保**
- 16.13.3 フレキシブル配列メンバの使い方**
- 16.13.4 演習
-
16.1 構造体の基本
-
17. 型の別名*
-
17.1 型に別名をつける*
- 17.1.1 自己参照的構造体の宣言で使うとき*
- 17.1.2 システム標準のヘッダファイルで定義される型*
- 17.1.3 演習
-
17.2 typedef を使った宣言の読み方**
- 17.2.1 typedef 宣言の読み方**
- 17.2.2 別名を使った宣言の読み方**
- 17.2.3 演習
-
17.3 typedef 宣言の書き方**
- 17.3.1 簡単な型に別名を与えたい場合*
- 17.3.2 構造体型や列挙型などに短い名前をつけたい場合*
- 17.3.3 複雑な型の中身を見ないで扱いたい場合**
- 17.3.4 演習
-
17.1 型に別名をつける*
-
18. 型の修飾*
-
18.1 型の修飾の種類*
- 18.1.1 const 修飾*
- 18.1.2 volatile 修飾**
- 18.1.3 restrict 修飾**
- 18.1.4 型修飾をどう使うか**
- 18.1.5 演習
-
18.2 型修飾付きの宣言*
- 18.2.1 概略*
- 18.2.2 読み方**
- 18.2.3 書き方**
- 18.2.4 演習
-
18.1 型の修飾の種類*
-
19. 高度な機能*
-
19.1 可変長配列*
- 19.1.1 自動変数の可変長配列*
- 19.1.2 仮引数の可変長配列宣言**
- 19.1.3 自動変数と仮引数の可変長配列の違い**
- 19.1.4 演習
-
19.2 複素数型**
- 19.2.1 複素数型の種類**
- 19.2.2 定数**
- 19.2.3 演算子とライブラリ API**
- 19.2.4 演習
-
19.3 型総称マクロ**
- 19.3.1 演習
-
19.4 C11の機能**
- 19.4.1 C11で追加された主な機能**
- 19.4.2 C11でオプションとなった機能**
- 19.4.3 C11で取り除かれた機能**
- 19.4.4 演習
-
19.1 可変長配列*
- 20. おわりに
- 参考文献
- コードリスト一覧
- 索引
- 著者について
Leanpubの60日間100%満足保証
購入後60日以内であれば、たった2クリックでLeanpubでの購入について100%返金を受けることができます。
技術的には、本やコースのファイルはお手元に残るため、これは私たちにとってリスクとなります。しかし、私たちは自社の製品やサービス、そして著者と読者を深く信頼しているため、販売する全ての商品に対して全額返金保証を喜んでご提供しています。
何かの良し悪しは実際に試してみないとわかりません。100%返金保証があるため、試すことに全くリスクはありません!
ですから、カートに追加するボタンをクリックしない理由はないですよね?
利用規約の詳細を見る...
$10の購入で$8、$20の購入で$16を獲得
$7.99以上の購入に対して80%のロイヤリティを、$0.99から$7.98までの購入に対して50セントの定額手数料を差し引いた80%のロイヤリティをお支払いします。$10の売上で$8、$20の売上で$16を獲得できます。つまり、あなたの本が$20で5000部返品なしで売れた場合、$80,000を獲得できます。
(はい、すでに多くの著者がLeanpubでそれ以上を稼いでいます。)
実際、著者たちはLeanpubでの執筆、出版、販売を通じて1,400万ドル以上を獲得しています。
Leanpubでの執筆についてさらに詳しく
無料アップデート。DRMフリー。
Leanpubの本を購入すると、著者が本を更新し続ける限り、無料でアップデートを受け取ることができます!多くの著者は執筆中の本をLeanpubで公開しています。全ての読者は、購入時期や支払額(無料も含む)に関係なく、無料アップデートを受け取ることができます。
ほとんどのLeanpubの本は、PDF(コンピュータ用)とEPUB(スマートフォン、タブレット、Kindle用)で利用できます。本に含まれるフォーマットは、このページの右上に表示されています。
さらに、Leanpubの本にはDRMによるコピー保護は一切ないため、対応デバイスで簡単に読むことができます。