C言語 チャックリスト
□scanfの場合、doubleは%lfになる
□関数の戻り値の方は、指定しないとintになる(今後は廃止?)
□引数の上限は31個
□仮引数・・・関数の引数を受け取るための変数
□仮引数を持たない関数は仮引数リストにvoidをしていする。 int fun( void )
□intは16ビット環境では16ビット長で-32,726〜32,725まで、32ビット環境では32ビット長で-2,147,483,648〜2,147,483,647までとなる
□コメントの中にコメントを記述することは許されない
□名前に指定できる文字/出来ない文字
short-hell | × |
$balance | × |
last+name | × |
9times | × |
a$b | ○ |
aaa@tdd | × |
_yyy | ○ |
aaa_kkk | ○ |
□真・・・0以外
□偽・・・0
□インクリメント・ディクリメントが変数の後ろにある場合、式などに使われた後演算が行われる
□Cのエスケープ文字
\b | バックスペース |
\f | ページ送り |
\n | 改行 |
\r | 復帰 |
\t | タブ |
\" | 二重引用符 |
\' | 引用符 |
\0 | ヌル |
\\ | 円マーク |
\v | 垂直タブ |
\a | ベル |
\? | 疑問符 |
\N | 8進の定数 |
\xN | 16進の定数 |
□関係演算・・・>、>=、<、<=、==、!=
□論理演算・・・&&、||、!
□演算子の優先度
高 ↑ ↑ ↓ ↓ 低 |
! |
> >= < <= | |
== != | |
&& | |
|| |
高 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 低 |
()[] |
! ~ + - ++ -- | |
*/% | |
+ - | |
<< >> | |
< <= >= > | |
== != | |
& | |
^ | |
| | |
&& | |
|| | |
?: | |
= += -= *= /= | |
, |
□排他的論理和
a | b | XOR |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
□ifの中のif、ループの中のループをネストという。
□ANSIではif、forのネストは15までは保証。しかし、通常のコンパイラでは制限がない。
□switch文はintかcharの定数と比較する。
□ANSIでは257個のcaseに対応していなくてはならない。
□ANSIではswitchのネストは15レベルまで保証。
□データ修飾子
long |
short |
signed |
unsigned |
□intはデフォルトで符号がつくため、signedを指定するのは冗長である。charはコンパイラに依存するため妥当。ただし、ほとんどのコンパイラでは符号付きである。
□省略記法 unsined nCountはunsined int nCountと等しい
□データ修飾子の出力
short | %hd |
long | %ld |
unsigned | %u |
unsigned long | %lu |
long double | %Lf |
□範囲内であればintの使える個所ではcharも使える。(intよりcharの方が短いのでアクセス時間が短い)
□浮動小数型は整数部・小数部どちらかを省略できる。
112.
.0234
□浮動小数は科学的記数法で表記できる・・・仮数部 E 符号 指数部
□数値定数のデフォルト以外を使用しなくてはならないとき、定数値に接尾子をつける。接尾子(小文字も可)
F float
U unsigned
L long
FL long double
□ポインタを使って変数にアクセスすることを間接参照という。
□ポインタを用いその方より大きな方の値を代入すると隣のメモリまで上書きしてしまう
□再帰 とは何かがそれ自身によって定義されているプロセスのこと
□値渡し Call by value
□オペレーティングシステムの種類にもよるが、正常終了は0/異常終了は0以外が帰る。
□#define マクロ名 文字列
□マクロ名は、変数の命名規則に従う
□printfに比べputsはオーバーヘッドが少なく実行速度が速い
□getche()は文字が入力されるとコンソールに表示し直に値を帰す。
□getch()は文字が入力されるとコンソールに表示せずに直に値を帰す。
□%[-][最小フィールド幅][.][精度]フォーマット指定子
□ファイルへの書き込み(バッファをフラッシュする)以下の3つのタイミングで行われる
・バッファに1セクタ以上のデータが溜まったとき
・ファイルがクローズされたとき
・フラッシュを指定したとき
□汎用ポインタ void型のポインタで型変換を行わず任意のポインタを示す。
□size_t型 コンパイラがサポートする最大オブジェクトの大きさを持つ値を保持できる。
□rewind() 現在位置を先頭に移動する。
□fflush() ファイルのディスクバッファをフラッシュする。
□リダイレクト 標準入出力先の一時的な変更のこと
□構造体
struct タグ名
{
}変数リスト;
□構造体のインスタンス struct タグ名 変数リスト
□コンパイラ、CPUによってはメンバの合計が構造体のサイズにならない場合がある
□アロー演算子(->) ポインタを使用し各メンバにアクセスする。
□ビットフィールド 型 名前:サイズ *型・・・int , unsigned
□
struct a
{
char* psName;
unsigned a:1;
unsigned b:1;
unsigned c:5;
};
□共用体 2つ以上の変数によって共有されるメモリ上の単一の領域
□記憶クラス指定子
□auto 自動変数を定義する
□extern コンパイラに型と存在(別のファイルで変数が定義されていること)することを教える
□registar 変数への高速なアクセスを実現する。
あまり多くの変数に使用すると効果がなくなる。
一つの関数に2つぐらいまで
レジスタに格納されるため(環境によって異なる)ポインタは使えない
*コンパイラの多くは可能な変数については自動的にregisterとする。
□static ローカル変数の内容を複数の関数にまたがって保存しておくことができる。
グローバル変数にも適用ができる
*グローバルとの違いに他のファイルからはアクセスできないという性質がある。
□型修飾子
const
volatile
□列挙型 enum タグ名{列挙リスト}変数のリスト
□typedef 既存の型名 新しい型名
*1:移植性が増す
*2:自己説明的コードが作成できる。
□ビットごとの演算子
& AND演算子
□シフト演算子 ビットシフト演算子
□左シフト演算子 値 << ビット数
□右シフト演算子 値 >> ビット数
□条件演算子
三項演算子 var = 条件 ? 式1 : 式2;
□マクロ関数 #define SUM( i, j) i + j
インラインコードに変換される
オーバーヘッドが少ない
サイズが大きくなる
□#includeディレクティブ
#include<ファイル名>・・・コンパイラの実装によって定義されている箇所から検索
#include"ファイル名"・・・カレントディレクトリやユーザの定義箇所から検索、発見できなかった場合、コンパイラの実装によって定義されている箇所を検索
□条件付きコンパイル
プリプロセッサディレクティブ
#if
#elif
#endif
#ifdef
#ifndef
□defined マクロ名 ・・・次の二つは同じ意味になる
#ifdef マクロ名
#if defined マクロ名
□!defined マクロ名 ・・・次の二つは同じ意味になる
#ifndef マクロ名
#if !defined マクロ名
□#error エラーメッセージ
コンパイラがコンパイル処理中にエラーメッセージとコンパイルの情報(通常のコンパイラは行番号とファイル名)
□#under マクロ名
マクロ定義を局所化する
*マクロが定義されていなければ無効化される。
*マクロを消す?
□#line 行番号 "ファイル名"
現在コンパイルしている情報を変更する
□#pragma
プリプロセッサディレクティブを定義することができる
□ANSI C標準に準拠したコンパイラで使用できるマクロ
□__LINE__ 現コンパイルの行
□__FILE__ 現コンパイルのファイル名
□__DATE__ コンパイル開始の日付
□__TIME__ コンパイル開始の時間
□__STDC__ ANSI C基準に準拠していれば1を示す
□#演算子 マクロ関数の引数を引用符付き文字列に変換する。
□##演算子 2つの引数を連結する。
□関数ポインタ 関数エントリアドレスを保持する
宣言:int (*p)(int i, int j)
実行:(*p)(1,2)
*「*p」は必ず「()」で囲む
□型修飾子のフォーマット指定子
printf
int %d
short int %hd
long int %ld
unsigned int &ud
□定数float型であることを明示的にコンパイラに示すには定数の前にFをつける。
long L
unsigend U
□int a=0,b=8,c=a;は正しくない。
ほかの変数で新しい変数の初期化はできない
□型変換
flort a;
a = 10/3;
aに代入される値は3.0である。
□デフォルトの定数の型
10 int
10000 long *intが16ビットの場合
8.65 dowble *少数の場合は、floatではなくdowble
□次の配列を使ったアクセスからポインタを使ったアクセス方法に直せ
配列 int a[100][100]
a[44][8]=99;
ポインタ *((int*)a + (44*100) + 8)