lang

はじめての C

昨年の 9月から そのままに なってた アドレスブックの code を なんとか 動かせるように してみた。 まちがってる 可能性も あるけど ... /* addbook.c */ #include <stdio.h> #include "addbook.h"int main(int argc, char **argv) { PERSON add_book[MAX_PSN]; int</stdio.h>…

はじめての C

[Learning GNU C] 第16章 速度 やさしい 効率化 -- 低い 位置で 果実を 摘む C は 利用できる 最速の 高レベル language として よく 知られている。 16.1. 効率化について コードを 効率的にする ときは 2つ ある -- それを 書いている 間と 実行して ガッ…

はじめての C

[Learning GNU C] 第14章 ライブラリの 使い方と 書き方 コンパイルコードの 再利用 14.1. ライブラリとは なにか? ライブラリは 最初に 実行される main() に 含まれないことを 除けば プログラムと 似ている。 ライブラリにある 関数は アプリケーションと…

はじめての C

[Learning GNU C] 13-3. argp の機能を さらに使う これは 長めの プログラムで 4つの グローバル変数を 使い 自分の プログラムに 関する 情報を 保持する。 Example 13-3. better_argp.c #include <stdlib.h> #include <argp.h>const char *argp_program_version = "simple_a</argp.h></stdlib.h>…

はじめての C

[Learning GNU C] 第13章 コマンドラインに 引数を とる 13.1. C では コマンドラインの 引数を どう 扱うか? プログラムは OS が main() 関数プログラムを 呼び出すことから 始める。 今までは それぞれの プログラムで main() を 引数を とらない 関数とし…

はじめての C

[Learning GNU C] 第12章 関数の 秘訣 trick 12.1. 仮想関数 virtual function とは なにか? void データ型の 別の 使い方に 関数ポインタを つくることが ある。 これは 十分 進化した fairly advanced プログラミング テクニックだが 非常に 役にたち 満足…

はじめての C

[Learning GNU C] 10.5. マクロは 必要か? マクロは language の 小さな 欠点を 補うために よく 使われた。 しかし language の 進化により こうした 試み defiance は ほとんど 脇へと 追いやられた。 プリプロセッサの マクロを 理解し その使い方を 知る…

はじめての C

[Learning GNU C] 10.4. マクロへの 警告 caveat マクロは まちがった 使い方が できる。 コードが コンパイルを 始めると もはや マクロは 存在しないので バグを つかまえるのは 困難だ。 小さな 例題を 取り上げよう。 Example 10-2. max_macro.c #define…

はじめての C

[Learning GNU C] 第10章 C プリプロセッサ いつ どのように 使うか 10.1. プリプロセッサとは なにか C プリプロセッサは コンパイラに 渡す前に ソースコード上で 走らせる 簡単な マクロの 拡張のことだ。 ハッシュ記号 '#' から 始まる 行で プリプロセ…

はじめての C

[Learning GNU C] 9.6. 制約型 識別子 restrict type qualifier 思うに、これは ポインタを 使った なんらかの 実装であって、特定した ポインタが メモリの ある区域のみの ポインタで あることを コンパイラへ 知らせる。 これを 知っていることで より効…

はじめての C

[Learning GNU C] 9.4. extern extern は その変数が すでに 外部の 関数 または ファイルに 存在することを 意味するので extern を つけて 変数を 宣言すると プログラムは 実際には それへの メモリを 用意 reserve しない。 開発中に ある変数を 全ての …

はじめての C

[Learning GNU C] 第9章 記憶クラス storage class 変数の 行動 behavior (範囲) を 変えること。 9.1. 記憶クラスとは なにか? 関数の中の 変数は その関数が 現われるごとに (変数の) 値を 失うことに 気づくだろうが これは 効率の 上から そう なってい…

はじめての C

[Learning GNU C] 第7章 実行時 run-time の メモリ割り当て memory allocation (プログラムの) 実行中に メモリを 要求すること。 7.1. なぜ それは 必要か。 プログラムを 書くとき たいてい どのくらいの データを 記憶 あるいは 処理しないと いけないの…

はじめての C

[Learning GNU C] 6.8. 構造化データ structured data C で 新しい、例えば "Person" という 型を つくることが できる。 "Person" へは "name" という 文字列、"age" という int (型) それに "height_in_cm" という 別の int を 記憶させられる。 これが 新…

はじめての C

[Learning GNU C] 6.5. 多次元 multidimensional 配列 先の 例題で 使われた 配列は 1次元配列だった。 配列は 次元を 1つ以上 もつことが できる。 こうした 配列の配列 array-of-array は 多次元配列と 呼ばれる。 それは 配列の 識別子 (名前) の 後に 複…

はじめての C

[Learning GNU C] 6.4. 配列の 初期化 initialize 先ほどの 例題では 配列 "hourly_wage" を コンマで 区切られた 値を 中カッコ "{ }" に 置くことで 初期化した。 この方法を 使えば 多少に かかわらず 配列の 要素を 思うように 初期化できるが 始めに 全…

はじめての C

[Learning GNU C] 第6章 構造化データ structured data の型 連続的 contiguous 構造化 データ型のこと 6.1. 構造化データ型とは なにか? C では 構造化 あるいは 総合化 aggregate データの 型を 決めるのに 2つの 方法が ある。 どちらも -- 別の 構造体 s…

はじめての C

[Learning GNU C] 5.4. ポインタ 演算 arithmetic ちょうど 他の 変数のように ポインタでも 演算を 行なうことが できる。 これは ほんの わずかな 場合でしか 役に たたない。 (なんらかの 理由から) ポインタを 2つに 分けたりすると おそらく それは そ…

はじめての C

[Learning GNU C] 5.3. 関数の 引数 argument としての ポインタ ポインタの すばらしい ところの 1つが 変数を -- それ自身の 有効範囲 scope の外側から -- 関数により 交換 swap させられることだ。 関数に ポインタを 渡すことで 変数が 保持する データ…

はじめての C

[Learning GNU C] 5.2. 変数の アドレス プログラムを 動かしていて 変数の 宣言に 出会うと プログラムは いくらかの メモリを 要求する。 OS は 十分な 大きさの 空いた メモリの スペースを 捜して その メモリスペースの アドレスを プログラムに 知らせ…

はじめての C

[Learning GNU C] 第5章 ポインタ 学生から プログラマを 区分 sort するもの。 5.1. 基本 関数は その返り値を 通してのみ プログラムに 作用するという 1つの 制限に 気づいただろう。 そこで 関数を 変数より もっと 効果の あるものと したい場合 どうす…

はじめての C

[Learning GNU C] 4.8. 条件演算子 "?:" 演算子は 式の 中で 使える 演算子という 理由 以外は if .. else 命令文と 同じだ。 あとは 略して ... これが 例題だ。 Example 4.6. apple.c #include <stdio.h>int main() { int apples = 6; printf("I have %d apple%s\n"</stdio.h>…

はじめての C

[Learning GNU C] 4.5. for for は while と 似ていて その書き方が 異なる。 for 命令文は 数を 並べるような リストでの 処理に よく 使われる。 Example 4-4. for_ten.c #include <stdio.h>int main() { int i; /* 0 から 9 までの 数を 表示 */ for (i = 0; i pri</stdio.h>…

はじめての C

[Learning GNU C] 4.3. ループ ループは コマンドを くり返す 方法を 備え それが 何回 くり返されるかを 調整する。 例えば スクリーン上に アルファベットを 表示したいときは printf() を 呼び出すことで 実行できる。 これも 1つの 答だが それでは あま…

はじめての C

[Learning GNU C] 4.2. if ... else if 命令文の 2つ目の 形に 条件式 test expression が 偽のとき (別の) code の ブロックの 実行を また 指定させるものが ある。 これは "if ... else" 命令文として 知られ 通常の if 命令文の 後に 予約語 reserved wo…

はじめての C

[Learning GNU C] 第4章 フロー制御 (ある) 決定に もとづいた 動作を とること。 C では 分岐 branching と ループ looping という 2種類の 判定手段を 備える。 分岐は なにを 選択肢に とるかを 決定し ループは ある一定の 動作を 何回 くり返すかを 決…

はじめての C

[Learning GNU C] 3.4. printf() の 手早い 説明 printf 命令文の 終わり近くの 2つの 文字 "\n" に 気づいたと 思う。 これは スクリーン上には 表示されない、printf() で 改行を 表す 記号だ。 '\' (バックスラッシュ) は 引用符 (" ") 内で 出会う C の …

はじめての C

[Learning GNU C] 3.3. 代入の 別の 例題 (ここで) 別の 例題について 時間を 割(さ)こう。 この ちょっとした code では -- すぐに 説明するが -- ほんの 少し より 新しいことが 示される。 Example 3.3. displaying_variables.c #include <stdio.h>int main() { sh</stdio.h>…

はじめての C

[Learning GNU C] 3.2. data の 型 C によって 定義される 全ての data の 型は byte と 呼ばれる memory の 単位から なる。 多くの コンピュータ構造では 1 byte は 8 bits から なり それぞれの bit は 0 または 1 を 保持する。 2つの 状態 (0 または 1)…

はじめての C

[Learning GNU C] 3.1. 自転車の 分解 これを 見ると いくつか 新しい点が ある。 これらを 説明するため このプログラムを カタマリ chunk に 砕いてみる。 int number_of_bicycles; int number_of_wheels; この 2つのline で それぞれの 変数を 宣言する。…