ファイル操作の概要 前章ではCプログラミング言語で扱われる標準入出力デバイスを説明しました。この章では、Cプログラマがデータストレージのためにテキストファイルやバイナリファイルを作成、オープン、クローズする方法を扱います。 ファイルは、テキストファイルであれバイナリファイルであれ、バイトのシーケンスを表します。Cプログラミング言語は、ハイレベル関数とローレベル(OSレベル)呼び出しの両方で、ストレージデバイス上のファイルを扱うアクセスを提供します。この章ではファイル管理の重要な呼び出しを説明します。 ファイルのオープン fopen()関数を使用して新しいファイルを作成したり、既存のファイル
入力と出力 入力とは、プログラムにデータを供給することです。入力はファイルまたはコマンドラインから与えられます。Cプログラミングでは、与えられた入力を読み取り、要件に応じてプログラムに供給する組み込み関数セットを提供します。 出力とは、画面、プリンタ、またはファイルにデータを表示することです。Cプログラミングでは、データをコンピュータ画面に出力するだけでなく、テキストやバイナリファイルに保存する組み込み関数セットを提供します。 標準ファイル Cプログラミングではすべてのデバイスをファイルとして扱います。したがって、ディスプレイなどのデバイスもファイルと同じようにアドレス指定され、プログラム
typedefとは Cプログラミング言語にはtypedefというキーワードがあり、これを使って型に新しい名前を付けることができます。1バイト数値のBYTEという用語を定義する例: typedef unsigned char BYTE; この型定義後、識別子BYTEは型unsigned charの省略形として使用できます。例: BYTE b1, b2; 慣習的に、これらの定義には大文字を使用し、型名が実際にはシンボリックな略称であることをユーザーに認識させますが、小文字も使用可能です: typedef unsigned char byte; typedefを使用して、ユーザー定義データ型に
ビットフィールドの必要性 CプログラムにTRUE/FALSE変数が多数含まれ、それらがstatusという構造体にグループ化されているとします: struct { unsigned int widthValidated; unsigned int heightValidated; } status; この構造体は8バイトのメモリ空間を必要としますが、実際には各変数に0または1のみを格納します。Cプログラミング言語は、このような状況でメモリ空間をより効率的に利用する方法を提供します。 このような変数を構造体内で使用する場合、変数の幅を定義できます。これはCコンパイラに、そのビッ
共用体とは 共用体は、同じメモリ位置に異なるデータ型を格納できるC言語で利用可能な特殊なデータ型です。共用体には多くのメンバを定義できますが、任意の時点で値を保持できるのは1つのメンバのみです。共用体は同じメモリ位置を複数の目的で効率的に使用する方法を提供します。 共用体の定義 共用体を定義するには、構造体を定義したときと同じようにunion文を使用します。union文は、プログラム用に複数のメンバを持つ新しいデータ型を定義します。union文の形式: union [union_tag] { member_definition; member_definition;
構造体とは 配列では同じ種類のデータ項目を複数保持する型の変数を定義できます。同様に構造体は、異なる種類のデータ項目を組み合わせることを可能にするC言語で利用可能なもう1つのユーザー定義データ型です。 構造体はレコードを表すために使用されます。例えば図書館の本を管理したい場合、各本について以下の属性を追跡したいかもしれません: タイトル 著者 主題 書籍ID 構造体の定義 構造体を定義するには、struct文を使用する必要があります。struct文は複数のメンバを持つ新しいデータ型を定義します。struct文の形式: struct [structure_tag] { membe
文字列の仕組み 文字列は実際にはヌル文字\0で終端される1次元の文字配列です。したがって、ヌル終端文字列には文字列を構成する文字に続けてヌルが含まれます。 以下の宣言と初期化はHelloという単語で構成される文字列を作成します。配列の末尾にヌル文字を保持するため、文字列Helloの文字数より1つ大きいサイズの文字配列になります。 char greeting[6] = {H, e, l, l, o, \0}; 配列初期化のルールに従うと、上記文は以下のようにも書けます: char greeting[] = Hello; 上記で定義された文字列のC/C++でのメモリ表現: 実際には、文字
ポインタとは C言語のポインタは学びやすく、楽しいものです。一部のCプログラミングタスクはポインタを使うとより簡単に実行でき、動的メモリ割り当てなどのタスクはポインタなしでは実行できません。完璧なCプログラマになるにはポインタを学ぶ必要があります。シンプルで簡単なステップで学び始めましょう。 ご存知の通り、すべての変数はメモリ位置であり、すべてのメモリ位置にはアドレスが定義されており、アンパサンド(&)演算子を使ってアクセスできます。これはメモリ内のアドレスを表します。以下の例は定義された変数のアドレスを出力します: Live Demo #include <stdio.h&g
配列とは 配列は、同じ型の要素を固定サイズの順序付きコレクションとして格納できるデータ構造の一種です。配列はデータのコレクションを格納するために使用されますが、同じ型の変数のコレクションと考える方がしばしば有用です。 number0、number1、...、number99のように個別の変数を宣言する代わりに、numbersのような1つの配列変数を宣言し、numbers[0]、numbers[1]、...、numbers[99]で個々の変数を表現します。配列の特定要素にはインデックスでアクセスします。 すべての配列は連続したメモリ位置で構成されます。最も低いアドレスが最初の要素に対応し、最
スコープとは プログラミングにおけるスコープとは、定義された変数が存在しうるプログラムの領域のことで、その領域を超えると変数にアクセスできません。Cプログラミング言語では変数を宣言できる場所は3箇所あります: 関数またはブロック内部 - ローカル変数と呼ばれる すべての関数の外部 - グローバル変数と呼ばれる 関数パラメータの定義内 - 仮パラメータと呼ばれる ローカル変数とグローバル変数、仮パラメータが何であるか理解しましょう。 ローカル変数 関数またはブロック内で宣言された変数をローカル変数と呼びます。それらはその関数またはコードブロック内の文でのみ使用できます。ローカル変数は自分
関数とは 関数は、一緒にタスクを実行する文のグループです。すべてのCプログラムには少なくとも1つの関数、つまりmain()があり、最も単純なプログラムでも追加の関数を定義できます。 コードを別々の関数に分割できます。コードを異なる関数にどう分割するかは自由ですが、論理的には各関数が特定のタスクを実行するように分割します。 関数宣言は、関数名、戻り値の型、パラメータについてコンパイラに伝えます。関数定義は関数の実際の本体を提供します。 C標準ライブラリはプログラムが呼び出せる多数の組み込み関数を提供します。例:2つの文字列を連結するstrcat()、メモリ位置を別の場所にコピーするmemc
ループとは コードブロックを何度も実行する必要がある状況に遭遇することがあります。一般的に文は順次実行されます:関数の最初の文が最初に実行され、続いて2番目、という具合です。 プログラミング言語はより複雑な実行パスを可能にする様々な制御構造を提供します。 ループ文により、文または文グループを複数回実行できます。一般的なループ文の形式: C言語が提供するループタイプ: 番号ループタイプと説明 1whileループ与えられた条件が真の間、文または文グループを繰り返す。ループ本体実行前に条件をテスト。 2forループ文のシーケンスを複数回実行し、ループ変数を管理するコードを簡略化。 3do.
意思決定構造とは 意思決定構造では、プログラマがプログラムによって評価・テストされる1つ以上の条件を指定し、条件が真と判定された場合に実行される文、およびオプションで条件が偽と判定された場合に実行される他の文を指定する必要があります。 一般的な意思決定構造の形式は以下の通りです: Cプログラミング言語では、非ゼロおよび非NULLの値をtrueと見なし、ゼロまたはNULLの場合はfalseと見なします。 C言語が提供する意思決定文のタイプ: 番号文と説明 1if文if文はブール式に続けて1つ以上の文で構成されます。 2if...else文if文にオプションのelse文が続き、ブール式が
演算子とは 演算子とは、コンパイラに特定の数学的または論理的機能を実行するよう指示する記号です。C言語は豊富な組み込み演算子を備え、以下のタイプの演算子を提供します: 算術演算子 関係演算子 論理演算子 ビット演算子 代入演算子 その他の演算子 この章では各演算子の働きを見ていきます。 算術演算子 以下の表はC言語がサポートするすべての算術演算子を示します。変数Aが10、変数Bが20を保持すると仮定: 演算子説明例 +2つのオペランドを加算A + B = 30 -第1オペランドから第2オペランドを減算A - B = -10 *両オペランドを乗算A * B = 200 /分子を分母で除
ストレージクラスとは ストレージクラスは、Cプログラム内の変数および/または関数のスコープ(可視性)とライフタイム(生存期間)を定義します。これらは修飾する型の前に記述します。Cプログラムには4つの異なるストレージクラスがあります: auto register static extern autoストレージクラス autoストレージクラスは、すべてのローカル変数のデフォルトストレージクラスです。 { int mount; auto int month; } 上記例は同じストレージクラスの2つの変数を定義しています。autoは関数内、つまりローカル変数でのみ使用でき
定数とは 定数とは、プログラムが実行中に変更できない固定値のことです。これらの固定値はリテラルとも呼ばれます。 定数は、整数定数、浮動小数点定数、文字定数、文字列リテラルなどの基本データ型のいずれかになり得ます。列挙定数もあります。 定数は通常の変数と同様に扱われますが、定義後に値を変更できません。 整数リテラル 整数リテラルは10進数、8進数、16進数定数のいずれかです。プレフィックスで基数を指定します:16進数は0xまたは0X、8進数は0、10進数はプレフィックスなし。 整数リテラルには、U(unsigned)とL(long)の組み合わせであるサフィックスを付けることもできます。サ
変数とは 変数とは、プログラムが操作できるストレージ領域に与えられた名前です。Cの各変数には特定の型があり、それが変数のメモリのサイズとレイアウト、そのメモリに格納できる値の範囲、変数に適用できる操作のセットを決定します。 変数名は文字、数字、アンダースコア文字で構成できます。文字またはアンダースコアで始まる必要があります。大文字小文字は区別されます(Cは大文字小文字を区別します)。前章で説明した基本型に基づくと、以下の基本変数型があります: 番号型と説明 1char通常1オクテット(1バイト)。整数型です。 2intマシンにとって最も自然な整数サイズ。 3float単精度浮動小数点値。
データ型の分類 C言語のデータ型は、異なる型の変数や関数を宣言するために使用される広範なシステムです。変数の型は、ストレージでの占有サイズと、格納されたビットパターンの解釈方法を決定します。 Cの型は以下のように分類されます: 番号型と説明 1基本型算術型で、さらに(a)整数型と(b)浮動小数点型に分類されます。 2列挙型これも算術型で、プログラム全体で特定の離散的な整数値のみを割り当て可能な変数を定義するために使用されます。 3void型型指定子voidは値が利用できないことを示します。 4派生型(a)ポインタ型、(b)配列型、(c)構造体型、(d)共用体型、(e)関数型を含みます。
C言語のトークン Cプログラムの基本構造を理解したので、Cプログラミング言語のその他の基本的な構成要素も容易に理解できるでしょう。 Cプログラムは様々なトークンで構成され、トークンはキーワード、識別子、定数、文字列リテラル、または記号のいずれかです。例えば、以下のC文は5つのトークンで構成されます: printf(Hello, World! \n); 個々のトークンは以下の通りです: printf ( Hello, World! \n ) ; セミコロン Cプログラムにおいて、セミコロンは文の終端記号です。つまり、個々の文は必ずセミコロンで終わらなければなりません。これは1つの論理的実体
Cプログラムの基本構造 Cプログラミング言語の基本的な構成要素を学ぶ前に、最小限のCプログラム構造を見て、今後の章での参照基準としましょう。 Hello Worldの例 Cプログラムは基本的に以下の部分で構成されます: プリプロセッサコマンド 関数 変数 文と式 コメント Hello Worldと出力するシンプルなコードを見てみましょう: Live Demo #include <stdio.h> int main() { /* Cでの最初のプログラム */ printf(Hello, World! \n); return 0; } 上記プログラム
C言語