MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚えるC言語

単語と記号

予約語
C言語の基本的な予約語は以下の通りです。

C言語の予約語
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

コンパイラによっては、これ以外にも予約語を定義していることがあります。
また、C++コンパイラでは、C++の予約語も定義されています。
多くは普段使用する単語なのでとくに意識しなくてもわかりますし、
万一使ってしまってもコンパイラのエラーですぐに気づくと思います。

なお、予約語もマクロ名としては使用できてしまいますが、
混乱の元になるので使用しないほうが良いでしょう。

実は main は予約語ではないので変数名などに問題なく使用できますが、
違和感があるので使用しないほうが良いでしょう。
出力変換指定子
出力変換指定子の書式と指定子に関する資料です。
printf関数などで使用されているものです。

出力変換指定子の書式
% オプション 長さ.精度 型

これらを、つなげて指定します。型以外の指定子は省略することが可能です。
一般的には、頭揃えの目的で長さのみを指定することが多いです。
なお、長さと精度の間の点は小数点です。カンマではありません。
ちなみに、精度と型の間にサイズに関する情報を持つ処理系もありますが、
これは、far,near ポインタ用で、明らかに時代遅れなので、取り扱いません。

オプション一覧
記号 効果
- 左詰めで表示
+ 右詰めで表示
# 0、あるいは小数点の抑制を行わない。

長さと精度の書式
記号 効果
L 最低でもL桁で出力する。余白はスペースで埋める。
0L 最低でもL桁で出力する。余白は0で埋める。
L.P 全体を最低でもL桁、小数点以下をP桁で出力。
L.0 全体を最低でもL桁、小数点以下は出力しない。
なお、長さの数値を L、精度の数値をPとします。
※0は正確にはオプションですが、説明のため長さと精度に含めます。

型一覧
記号 意味
d,i 整数の10進数。
o 整数の8進数符号なし。
x,X 整数の16進符号なし。x は小文字、X は大文字で。
u 整数10進数符号なし。
f 実数。
e,E 実数の指数形式。e は小文字、E は大文字。
g,G 実数のサイズに応じて、通常出力か指数形式が選択される。
c 1文字。
s 文字列。ヌル文字まで出力。
p ポインタのアドレスとして出力。16進大文字。
n これまでに書き出された文字数の出力。型変換をしない。
% 文字 % の出力。型変換をしない。

double型の表示に使うのは、%fが正解です。
もともとは、%lfは存在していなかったのですが、現在では%lfも使用できます。
入力変換指定子
入力変換指定子の書式と指定子に関する資料です。
主に、scanf関数などで使用されているものです。

入力変換指定子
% * 長さ サイズ 型

これらを、つなげて指定します。型以外の指定子は省略することが可能です。
一般的には、入力制限の目的で長さのみを指定することが多いです。
ちなみに、長さとサイズの間にポインタのサイズに関する情報を持つ処理系もありますが、
これは、far,near ポインタ用で、明らかに時代遅れなので、取り扱いません。

* を付けた場合、データを読み飛ばします。(変数に代入しません)
ファイルのデータを読み込む場合などに、不要なデータを飛ばすのに使います。

長さを指定すると、そのケタ数だけの数字(あるいは文字列)を読み込みます。
数字のケタ数の制限や、文字列バッファの領域を超えないようにするために使われます。

サイズ一覧
記号 効果
h 読み込んだデータをshort型に変換する。
l 読み込んだデータを型の指定に合わせて、long型かdouble型に変換する。
L 読み込んだデータをlong double型に変換する。

型一覧
記号 意味
d int型の10進数。
o int型の8進数。
x int型の16進数。
i int型。進数はデータにあわせて決定。
u unsigned int型の符号なし10進数。
f float型
e,E float型の指数形式。e は小文字、E は大文字。
g,G 通常形式か指数形式。
c char型の文字。
s 空白を含まないchar型の文字列。
p ポインタの値。
n これまでに読み込まれた文字数を代入。データを読み込まない。
% 何もしない。無意味な指定。

入力変換指定子は、代入を行うので型の指定が厳しくなります。
上の一覧にはdouble型がありませんが、
これはサイズ指定子のlと組み合わせて指定します。
演算子と優先順位
Cの演算子の優先順位はとてもうまく考えられているので、
一般的な使用では、明示的に () を付ける必要はなく、
数式の通りに書くことでうまくいくことがほとんどです。
ただ、優先順位が不安な時は、この表を見て比べるよりも、
() を付けるのが簡単で確実です。

C言語の演算子と優先順位
上にあるものほど優先順位が高くなっています。
区切られた各部分の記号は同じ優先順位となります。

型一覧
名前 記号 機能 結合規則 項数
配列添字 [] 配列の要素番号の指定 左から右 単項
関数呼び出し () 関数を呼び出す 左から右 単項
要素選択 . 構造体の要素を選択 左から右 単項
-----
アロー -> 構造体ポインタの要素を選択 左から右 単項
後置インクリメント ++ 変数の値を1増やす なし 単項
後置デクリメント -- 変数の値を1減らす なし 単項
前置インクリメント ++ 変数の値を1増やす なし 単項
前置デクリメント -- 変数の値を1減らす なし 単項
参照 * ポインタのさす変数にアクセス なし 単項
アドレス & 変数のアドレスにアクセス なし 単項
単項プラス + 正の値にする なし 単項
単項マイナス - 負の値にする なし 単項
論理否定 ! 真と偽の状態を反転 なし 単項
サイズオブ sizeof 変数や配列や型のサイズを取得 なし 単項
キャスト (型) 指定の型に強制変換 右から左 単項
-----
乗算 * 掛け算 左から右 2項
除算 / 割り算 左から 2項
剰余 % 余り 左から右 2項
-----
加算 + 足し算 左から右 2項
減算 - 引き算 左から右 2項
-----
左シフト << 変数の値を1ビット左にずらす(2倍) 左から右 単項
右シフト >> 変数の値を1ビット右にずらす(半分) 左から右 単項
-----
小なり < 左側の値が右より小さい時に真 左から右 2項
大なり > 左側の値が右より大きい時に真 左から右 2項
以下 <= 左側の値が右以下の時に真 左から右 2項
以上 >= 左側の値が右以上の時に真 左から右 2項
-----
等価 == 左と右の値が等しい時真 左から右 2項
不等価 != 左と右の値が異なる時真 左から右 2項
-----
ビットAND & ANDを取る 左から右 2項
-----
ビット排他的論理和 ^ 排他的論理和を取る 左から右 2項
-----
ビットOR | ORを取る 左から右 2項
-----
論理AND && 左と右の両方が真の時に真 左から右 2項
-----
論理OR || 左と右のどちらかが真の時に真 左から右 2項
-----
条件 ?と: 真の時は前式を、偽の時は後式を代入 右から左 3項
-----
代入 = 左の変数に右の式の値を代入 右から左 2項
代入乗算 *= 左の変数に右の式との値の掛け算を代入 右から左 2項
代入除算 /= 左の変数に右の式との値の割り算を代入 右から左 2項
代入剰余 %= 左の変数に右の式との値の余りを代入 右から左 2項
代入加算 += 左の変数に右の式との値を足し算を代入 右から左 2項
代入減算 -= 左の変数に右の式との値を引き算を代入 右から左 2項
左シフト代入 <<= 左の変数に右の式との値の左シフトを代入 右から左 2項
右シフト代入 >>= 左の変数に右の式との値の右シフトを代入 右から左 2項
ビットAND代入 &= 左の変数に右の式との値のANDを代入 右から左 2項
ビット排他的論理和代入 ^= 左の変数に右の式との値の排他的論理和を代入 右から左 2項
ビットOR代入 = 左の変数に右の式との値のORを代入 右から左 2項
-----
順次 , 式を結合 左から右 2項

呼び方にはとくに決まりがありませんが、一般的だと思われる呼び名を使用しました。
下に、いくつかの演算子についての解説を付けておきます。

参照演算子とは、ポインタ変数を通常変数モードに切り替える演算子です。
なお、ポインタ変数を宣言する時に付ける*とは文法上は関連性はありません。

配列添字演算子とは、配列に付けられる[]のことを意味しており、
その機能はアドレスへ変数のバイトサイズ分の足し算を行うことです。
なお、配列を宣言する時に付ける[]とは文法上は関連性はありません。

条件演算子とは、条件式を簡単に作るものであり、下のように使用します。

条件演算子
変数 = ( 条件式 ) ? 式1 : 式2 ;

条件式が真の時は式1が実行され、偽の時は式2が実行されます。
そして、その結果が、変数に代入されますが、変数を指定しなくても使えます。
if文より条件判断を簡便に書けるので、これを好んで使用する(筆者も)人もいます。
なお、この演算子はC言語で唯一3項を使うので、3項演算子とも呼びます。

順次演算子とは、2つの式を1つにまとめてしまおうというものです。

順次演算子
j = (i = 3 , i + 2 );

この例では、先に i = 3 が計算され、次に i + 2 が計算されます。
最終的に、jには5が代入されることになります。
ただ、この演算子にはこれといった使い道がありません。
記憶クラス指定子
C言語には、以下の記憶クラス指定子が用意されています。
しかし、すでに使われなくなったものも多いようです。

記憶クラス指定子
auto
register
static
extern
typedef


auto指定子
変数が自動変数であることを意味します。
しかし、関数の内部では自動的に自動変数になるし、
関数外ではエラーになるので無意味な指定子です。


register指定子
その変数が頻繁に使用されることを意味します。
昔はこの変数をレジスタに割り当てることで、
処理の高速化を行っていましたが、
現在ではコンパイラの最適化機能が優先されます。

現代では、マルチスレッドプログラミングで、
排他処理する変数の指定として使用されることがあります。


static指定子
その変数がプログラム終了まで残り続けることを意味します。
関数内では、変数の値が関数の中で保持されるようになります。
関数外では、変数がそのソースファイルの中でだけ有効になります。


extern指定子
変数などの定義が他のソースファイルで行われていることを意味します。
ヘッダーファイル内で共通変数を宣言するのに使用されます。


typedef指定子
新しい型を宣言します。
型宣言を簡単にできる上、コンパイラによるチェックも行えます。
※本来は記憶クラスとは無関係ですが文法の都合でここに含まれます。

エスケープ文字
画面には表示できないけど、文字列の表示などを操作する目的で使われるものです。
改行を行う\nがなんといっても有名ですが、ほかにも次のようなものがあります。

エスケープ文字
エスケープ文字 16進数 機能
\a 0x07 ビープ音を鳴らす
\b 0x08 カーソル位置を1つ後ろにずらす
\t 0x09 カーソル位置を次のタブ位置に移動する
\n 0x0A カーソル位置を次の行に移動(改行)
\f 0x0C 紙を排出する(プリンタの場合のみ)
\r 0x0D カーソル位置を行の一番左に移動(Macでは改行)
\\ 0x5C \を表示する
\' 0x2C 'を表示する
\" 0x22 "を表示する
\? 0x3F ?を表示する
\数字 8進数で同じ 対応する8進数の文字コードを表示
\x数字 数字と同じ 対応する16進数の文字コードを表示

この中でよく使用されるのは\nと\tです。
\fは、プリンタへの出力の時にのみ使えますが、あまり一般的ではありません。
\rは、Macでは改行なので、現在では他のOSでも改行となります。

エスケープ文字は、その表記には2文字以上を使用しますが、
それは表記上であって、内部的には1文字として取り扱われます。
定義済み定数
C言語では、処理系の情報や、デバッグに使える情報などを、
定義済みの定数として用意しています。

デバッグ用定数
定数 意味
__LINE__ 実行されている行番号
__FILE__ 実行されているソースファイル名
__DATE__ コンパイルされた日付
__TIME__ コンパイルされた時刻

__FILE__ と __LINE__ を使うことで、プログラムの実行時に、
エラーの発生した行番号を突き止めることが可能です。
ログファイルに吐いたり、簡易デバッガに使うととても便利です。
この機能が他のプログラミング言語にも欲しいよう・・・

整数型サイズの定義済み定数
定数 数値の意味
CHAR_BIT char型のビット単位のサイズ。
CHAR_MAX char型の最大値。
CHAR_MIN char型の最小値。
INT_MAX int型の最大値。
INT_MIN int型の最小値。
LONG_MAX long型の最大値。
LONG_MIN long型の最小値。
SCHAR_MAX signed char型の最大値。
SCHAR_MIN signed char型の最小値。
SHART_MAX short型の最大値。
SHART_MIN short型の最小値。
UCHAR_MAX unsigned char型の最大値。
UINT_MAX unsigned int型の最大値。
ULONG_MAX unsigned long型の最大値。
USHRT_MAX unsigned short型の最大値。
これらの定数の使用には #define <limits.h> が必要です。

char型を符号付にするかはコンパイラ依存です。
当然どちらでも文字の記憶には支障がないように作られています。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く