サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
dev.mescius.jp
データベースはそれ単体で利用するものではありません。多くの場合、アプリケーションを通じて操作します。SQLの話題に入る前に、アプリケーションとデータベースのつながり方を見ておきましょう。 一般に、リレーショナル・データベースは、SQL ServerやOracleなどに代表されるリレーショナル・データベース管理システム(RDBMS――Relational Database Management System)を介して、クライアント・サーバー方式のネットワークで利用することが前提となっています。 しかし、クライアント・サーバー方式のネットワークでこれらRDBMSを利用するのは、そう簡単ではありません。データベースやネットワークに対する知識と経験、さらには、データベースを利用するアプリケーションを開発するための知識と経験も必要になってきます。 リレーショナル・データベースは、データベースそのもの
Cの演算子を一通り紹介してきました。これらには『どの演算を先に行うか』という優先順位があります。 基本は算数の規則と同じ Cは関数で処理を組み上げていく言語で、制御構造などのいわゆる予約語は非常に少なく、ライブラリに納められている多数の関数とユーザー(プログラマー)が定義した関数とが等価に扱われるという特徴を持っています。 そのため、基本的な言語仕様がシンプルなのですが、シンプルな言語仕様でありながら細やかな処理を記述できるのは、演算子の種類が豊富なためだと言えます。 関数や演算子を使った処理・計算の手順を『式』と呼ぶことは、既に説明しました。その式を実行して結果を求めることを(式の)「評価」と呼びます。そして、演算子には「どの命令から先に評価するか」という優先順位があります。 四則演算子の場合、 +−より×(*)÷(/)を使った式を先に計算する という基本規則があります。これは、算数で習
構造体と似たデータ構造に共用体があります。構造体が型の異なる複数の変数を1つにまとめるのに対して、共用体は一定の範囲のメモリ領域を複数の異なる型で共有します。 共用体の定義~union共用体指定子 共用体はunion命令で定義します。基本的な定義方法は構造体と同じです。union命令は「共用体指定子」とも呼ばれます。 union <タグ> { <変数宣言> : }; 共用体では、最初に宣言したメンバのサイズが全体のサイズとなります。それ以降に宣言されたメンバは、最初に宣言したメンバの一部(先頭から宣言された変数の占有するサイズ分)を示します。 従って、2番目以降のメンバのサイズは最初に宣言したメンバより小さくなければなりません。 全体と部分を1つにまとめる 社員の識別番号(社員ID)が、以下のようなルールで定められているとします。それぞれのIDは2桁のchar型配列(文字列)で構成されてい
「式」と「評価」という言葉は既に紹介しましたが、もう一度説明しておきましょう。『式』とは何らかの演算を行う命令で、その結果である値を返します。式を実行して値を得ることを(式の)『評価』と言い、値は評価の結果です。 式と評価 例えば x = y * 100; (b) (a) という式は「変数yの持つ値を100倍し(a)、その結果を変数xに代入せよ(b)」という命令で、これを実行すると変数xに「yの100倍の値」が代入されます。 単純に「式」と言いましたが、上記の命令には2つの式が存在しています。まず「y * 100」という「変数yの値を100倍する」命令(a)です。例えばyの値が「5」であれば、この式の結果は「500」となります。これが、この式の返す値です。 しかし、プログラミングではこの単純な式は意味を持ちません。式の結果が変数に受け継がれなければ、続く処理で利用できないからです。そこで代
表1にCのビット演算子を掲げておきます。ビット演算とは言っても、扱う値はバイト単位などCの一般的な整数のデータ型です。ビット演算子は、それらの値をビット単位で計算します。 ビットシフト演算(<< >>)~2倍と1/2 例えばunsigned char型の1は、2進数では"00000001"という形のビット列(ビットパターン)になります。これを1桁左にずらす(シフトする)と"00000010"となります。ずらしてあふれた左端の0は消え、空いた右端には0が入ります。 "00000001"は10進数の「1」、"00000010"は10進数の「2」です。つまり、ビット列を左に1桁シフトすると値は2倍になるのです。 逆に"00000010"(10進数の「2」)を右に1桁シフトすると"00000001"(10進数の「1」)──つまり元の値の1/2になります。このように、整数の値はビット列を1桁左右にシ
複数のレコードを束ねるGROUP BY句には、複数のフィールドを「,」で列挙できます。すると「大グループ→小グループ」といった形の階層化ができます。 GROUP BY句に複数のフィールドを列挙した場合、左から順にフィールドの値がグループ化されます。まず左端のフィールドの値が同じレコードがグループ化され、その中で2番目のフィールドの値が異なる場合は、それらがさらにグループ化され……という形です。 「累積売上_fx」に対して「伝票日付」と「商品名」でグループ化してみましょう。以下のようなSQLとなります。 SELECT 伝票日付, 商品名 FROM 累積売上_fx GROUP BY 伝票日付, 商品名 実行結果は画面2の通りです。強調表示させた「伝票日付が10月10日」となっている3件のレコードに注目してください。画面3のように、元になったテーブル「累積売上_fx」には、10月10日の売上記録
文字列をコピーするstrcpy関数と文字列を連結するstrcat関数は、仕様上大きな欠点を抱えています。それを回避することを考えてみましょう。 他の変数領域を浸食する 仕様上の大きな欠点とは、受け側(strcpyでは第2引数、strcatでは第1引数)の配列に余裕がない場合、確保していた要素を超えて文字がコピーされてしまう――という点です。 例えば、要素数が10個の配列destに"Hello world!"という文字列を保持している配列srcの内容をstrcpy関数でコピーすると、"world"の"l"(小文字のL)のところでdestの余裕は尽きてしまい、"d!'\0'"の3バイト分がはみ出してしまいます。 「はみ出す」とは、確保されていた配列の最後に続くメモリ領域に値を書き込んでしまう――ということです。そこに他の変数の領域があれば、内容は勝手に変更されてしまいます。 strcat関数の
コメントの記号は言語によってさまざまです。Cでは複数行にわたるコメントを書けますが、多くの言語では1行コメントが採用されています。長いコメントをダラダラと書けることに、メリットはあるのでしょうか? /* */ と // Cのコメントは、 /* と */ の間に記述します。その間に改行が入っても構わないので、複数行にわたる長いコメントをまとめて記述できます。 また、C++コンパイラではCのソースもコンパイルでき、その場合にはC++のコメント記号である // も使えます。//記号は、そこから改行までをコメントと見なします。 中には、複数行の長いコメントなら/* */、1行の短いコメントなら//……と、使い分けている人もいるようです。が、できればコメント記号は『1言語につき1つ』に決めておいた方がいいでしょう。いろいろな言語を扱っていると、コメント記号を見て使われている言語を判断できるようになり
Cには『文字列型』というデータ型はなく、複数の文字の並びをchar型の配列として扱います。そのため、ちょっとした勘違いでとんでもない振る舞いをすることもあります。 最後に「0」を置いた特殊な配列 例えば"This is a pen."という文字列は、図1のような形でメモリに保存されます。char型は1バイトの数値ですから、配列の各要素には文字コードの数値が入ります(図1では16進数で表しています)。 最後の'\0'はエスケープシーケンスと呼ばれる制御文字で、数値の「0」を表しています。また、これはNULL文字とも呼ばれます ※1 。文字列の終端を、文字コードには使われない0('\0'という記号)で表しているのです。 配列はその要素数を明示してメモリに領域を確保できますが、常にすべての領域が文字で埋められるとは限りません。「Oh!」という3文字の場合もあれば「Oh! I think so.」
主要なヘッダファイル※2 は、#で始まるプリプロセッサ指令の集合』であると言えます。主なプリプロセッサ指令を紹介しておきましょう。 Cの処理系に予め準備されているヘッダファイルは確かにプリプロセッサ指令の集合となっています。 しかしCでは、プログラマーが独自の関数などを定義し、それを使うためのヘッダファイルを作ることがあります。 その場合、プリプロセッサ指令を記述しないこともあり得ます。 #include 機能 : ファイルを取り込む 書式 : #include <ファイル名> 詳細 : <ファイル名>で示されたファイルを取り込みます。ファイル名を<>で囲むと、設定ファイルなどで予め指定された、処理系のヘッダファイルを保存しているディレクトリ(フォルダ)からファイルを探します。それ以外の場所にあるファイルを取り込みたい場合には、ファイル名を""で囲みます。 ファイル名を""で囲んだ場合、通
市販アプリケーションの場合、印刷した冊子式のマニュアルにはインストールと初期設定程度までしか記述しないで、あとはオンラインヘルプに任せるのが一般的です。これには、パッケージサイズを小さくして流通経費を抑える目的もありますが、ユーザーにとってもあの分厚いマニュアルを開くことなく、マウスの操作で必要な情報を得られるのはありがたいことです。 市販アプリケーションの場合、オンラインヘルプにはWindowsのヘルプシステムで閲覧できるヘルプファイルを使うのが普通です。 Windowsのヘルプシステムはアプリケーションの「ヘルプ」メニューから起動できるため、ユーザーが操作に迷ったらその場で説明を表示できます。また、[F1]キーを押すことでその場の状況に応じた説明を表示させることも可能です。 しかし、特定の業種や特定の組織でしか使用しない業務用アプリケーションの場合、本格的なヘルプは必須ではありません。
複数のソースファイルを使って……と書きました。大規模なプログラムでは処理を複数のソースファイルに分割し、最終的に1つの実行形式ファイルに結合します。このとき必要になるのがextern宣言です。 外部の関数を参照する Cでは、ソースファイルを機能や役割別に分けて記述し、それぞれをコンパイルして生成された.objファイルをリンカ(linker)で結合して、最終的に1つの実行形式ファイルを作れます。 1つの.cソースファイルをコンパイルして生成された.objファイルをモジュール(module)と呼び、関数や変数の参照関係はモジュール単位で閉ざされています。abc.cから生成されたabc.objとxyz.cから生成されたxyz.objがあるとします。この2つのオブジェクトファイルは、お互いにその内部で定義された関数や変数を参照できません。 他のモジュールで定義されている関数を参照するには、参照元の
makeは上述したソースファイルの依存関係にもとづいて、コンパイルとリンクの処理を合理的に実行します。 makeの基本動作 作成するプログラムによってソースファイルが異なるため、当然のことながら作成するプログラムごとに依存関係は異なります。そのため、makeは依存関係を記述した"makefile"を読み込み、それにもとづいてコンパイラやリンカを起動します。 開発者は、ファイルの依存関係を記述したmakefileを作成しなければなりません。makefileの基本的な記述方法は、以下のとおりです。 生成されるファイル : 元になるファイルのリスト ファイルを生成するためのコマンドライン 「生成されるファイル」を「ターゲット」、「元になるファイル」を「ソース」と呼びます ※2 。 makeは上のような記述にもとづいて、「元になるファイルのリスト」が変更されていれば「ファイルを生成するためのコマン
ncursesライブラリに収録されている関数群を紹介しましょう。多彩な機能が網羅されています。 基本的な画面表示関数 表1のような関数が用意されています。 カーソル位置を移動して任意の位置から文字列を表示したり、文字や行を挿入するなどの機能があります。 scrollok関数とwscrl関数について補足しておきます。 標準入出力を使ってprintf関数などで文字列を出力した場合、文字列が画面の最下行に達すると、それ以降は画面が上にスクロールしていきます。これは、標準入出力がディスプレイもファイルもプリンタも同じ形式で連続的なデータを扱う仕様となっているためです。 しかしncursesライブラリの関数群には、このような制約はありません。文字列データは、単純にカーソル位置から順に出力されていきます。そのため、画面のスクロールが必要なときには、明示的にスクロールを指定しなければなりません。 まず
文字列を置換するstrchg関数を作りましょう。このプログラムの中心的な機能です。 関数の仕様 strchg関数では、 1行(改行まで)の文字列を対象に その中から指定された文字列を見つけては置換する という処理を行います。 この処理のためには、以下の3つの情報が必要です。 (1)読み込まれた1行の内容 (2)置き換えられる文字列(旧文字列) (3)置き換える文字列(新文字列) これら3つの情報は、プログラムの起動時に入力されるコマンドラインから取得できます。コマンドラインの内容は、main関数の引数――char型ポインタの配列であるargvが指し示しているので、main関数からstrchg関数を呼び出すときに、それらの情報を渡すことができます。 そこでstrchg関数では、引数として『それぞれの文字列の先頭を示すポインタ』を受け取ることにします。プロトタイプ宣言は以下のようになるでしょう
コンソールモードのOSには、ANSI(米国標準協会――American National Standards Institute)の制定した画面制御機能が備わっています。これを使うと、文字に色を付けたり、表示位置を変更したりできます。 特殊記号で画面を制御する コンピュータが登場した初期の頃には、さん孔式のカードやテープが基本的な入出力でした ※1 。後にディスプレイ(出力)とキーボード(入力)が誕生し、「ディスプレイにメッセージを表示し、それを受けてユーザーがキーボードからデータを入力する」という形式が標準となりました。 それ以降、ユーザーが操作しやすい親切な画面設計が重要になっていきます ※2 。単純な処理なら、画面の左端から、それも黒地に白でメッセージを表示するだけで済む場合もあるでしょう。しかし、専門家でない普通の人々が間違えないように入力を誘導するためには、メッセージの出力位置を
長谷川 裕行 (はせがわ ひろゆき) 大阪芸術大学 写真学科で映像文化をテーマに研究、講師を務める一方でライター、テクニカルアドバイザーとしても第一線で活躍中。 サラリーマン時代にBASICと出会い、3か月で業務アプリケーションを開発。COBOLも覚えたが物足りず、汎用機、オフコン、UNIXへと興味の対象を広げ、1年後にはC言語とx86のアセンブリ言語を習得。雑誌に投稿したプログラムのReadme.txtが気に入られて執筆の世界に入る。 実践的な業務アプリケーションの知識を生かし、プログラミングの“キモ”を親しみやすい文章で執筆された記事は、時間が経過しても読まれているため、公開を継続している。
このページを最初にブックマークしてみませんか?
『dev.mescius.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く