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
なお、予約語もマクロ名としては使用できてしまいますが、
混乱の元になるので使用してはいけません。
実は、main は予約語ではないので変数名などに問題なく使用できますが、
違和感があるのでわざわざ使うことはないと思います。
出力変換指定子の書式と指定子に関する資料です。
printf関数などで使用されているものです。
[ 変換指定子の書式 ]これらを、つなげて指定します。型以外の指定子は省略することが可能です。
% オプション 長さ.精度 型
[ オプション一覧 ]
- 左詰めで表示
+ 右詰めで表示
# 0、あるいは小数点の抑制を行わない。
[ 長さと精度の書式 ]※0は正確にはオプションですが、説明のため長さと精度に含めます。
なお、長さの数値を L、精度の数値をPとします。
L 最低でもL桁で出力する。余白はスペースで埋める。
0L 最低でもL桁で出力する。余白は0で埋める。
L.P 全体を最低でもL桁、小数点以下をP桁で出力。
L.0 全体を最低でもL桁、小数点以下は出力しない。
[ 型一覧 ]double型の表示に使うのは、%fが正解です。
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 これまでに書き出された文字数の出力。型変換をしない。
% 文字 % の出力。型変換をしない。
入力変換指定子の書式と指定子に関する資料です。
主に、scanf関数などで使用されているものです。
[ 変換指定子の書式 ]これらを、つなげて指定します。型以外の指定子は省略することが可能です。
% * 長さ サイズ 型
* を付けた場合、データを読み飛ばします。(変数に代入しません)
ファイルのデータを読み込む場合などに、不要なデータを飛ばすのに使います。
長さを指定すると、そのケタ数だけの数字(あるいは文字列)を読み込みます。
数字のケタ数の制限や、文字列バッファの領域を超えないようにするために使われます。
[ サイズ一覧 ]
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 これまでに読み込まれた文字数を代入。データを読み込まない。
% 何もしない。無意味な指定。
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 ;
順次演算子とは、2つの式を1つにまとめてしまおうというものです。
[ 順次演算子 ]この例では、先に i = 3 が計算され、次に i + 2 が計算されます。
j = (i = 3 , i + 2 );
C言語には、以下の記憶クラス指定子が用意されています。
しかし、すでに使われなくなったものも多いようです。
[ 記憶クラス指定子 ]
auto
register
static
extern
typedef
[ auto指定子 ]
変数が自動変数であることを意味します。
しかし、関数の内部では自動的に自動変数になるし、
関数外ではエラーになるので無意味な指定子です。
[ register指定子 ]
その変数が頻繁に使用されることを意味します。
昔はこの変数をレジスタに割り当てることで、
処理の高速化を行っていましたが、
現在ではコンパイラの最適化機能が優先されます。
[ static指定子 ]
その変数が静的に使われることを意味します。
関数内では、変数の値が関数の中で保持されるようになります。
関数外では、変数がそのソースファイルの中でだけ有効になります。
[ extern指定子 ]
変数などの定義が他の場所で行われていることを意味します。
ヘッダーファイル内で共通変数を宣言するのに使用されます。
[ typedef指定子 ]
新しい型を宣言します。
型宣言を簡単に出来る上、コンパイラによるチェックも行えます。
※本来は記憶クラスとは無関係ですが文法の都合でここに含まれます。
画面には表示できないけど、文字列の表示などを操作する目的で使われるものです。
改行を行う\nがなんといっても有名ですが、ほかにも次のようなものがあります。
[ エスケープ文字 ]この中でよく使用されるのは\nと\tです。
エスケープ文字 16進数 機能 \a 07 ビープ音を鳴らす \b 08 カーソル位置を1つ後ろにずらす \t 09 カーソル位置を次のタブ位置に移動する \n 0A カーソル位置を次の行に移動(改行) \f 0C 紙を排出する(プリンタの場合のみ) \r 0D カーソル位置を行の一番左に移動(Macでは改行) \\ 5C \を表示する \' 2C 'を表示する \" 22 "を表示する \? 3F ?を表示する \数字 8進数で同じ 対応する8進数の文字コードを表示 \x数字 数字と同じ 対応する16進数の文字コードを表示
エスケープ文字は、その表記には2文字以上を使用しますが、
実際には、あくまでも1文字です。
C言語では、処理系の情報や、デバッグに使える情報などを、
定義済みの定数として用意しています。
[ デバッグ用定数 ]__FILE__ と __LINE__ を使うことで、プログラムの実行時に、
__LINE__ 実行されている行番号
__FILE__ 実行されているソースファイル名
__DATE__ コンパイルされた日付
__TIME__ コンパイルされた時刻
[ 整数型サイズの定義済み定数 ]char型を符号付にするかはコンパイラ依存です。
これらの定数の使用には #define <limits.h> が必要です。
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型の最大値。