このあたりは知ってることばっかりですけどね。
間違いもあれば指摘してくれると助かります。
1.1 手始めに
- 何事もまずはHello,Worldを書いてみましょう
- intとfloatはマシンによって左右される
- 16bit intは-32678-32767
- floatは有効桁が6桁で大きさで10の-38乗から10の38乗
- 字下げは論理構造を明確にする
- printfはC言語の一部ではなくCから使用可能なマシンの標準入出力のルーチン(ANSIで定義されている)
- %d:10進
- %6d:6文字幅の10進
- %f:浮動小数点
- %.2f:浮動小数点、小数以下は2桁
- %6.2f:浮動小数点、6文字幅、小数以下は2桁
- %o:8進
- %x:16進
- %c:文字
- %s:文字列
- %%:%という文字
- forのほうがwhileよりもコンパクト
- ループ制御が一ヶ所で済む
- 初期化と再初期化が一つあので、論理的に関係があるものはforのほうがよい
- プログラム中にマジックナンバーを埋め込まない
- #defineを活用するべき
- #defineで置き換えられるのは数値だけでなく任意の文字でもよい
- 入出力はストリーム(流れ)で、どこで発生したのか流れたかは問題ではない
- ストリームをモデルに合うようにするのはライブラリの責任
- getchar(),putchar(c)があれば、入出力はそれ以外知らなくてもほとんど問題ない
- 受け取った文字はビットパターン
- getchar()ではintを利用することができる
- intをよく使うことが多いのは、大きさ(getachar()で受け取った文字を保持するのとEOF保持の為)
- while((c=getchar())!=EOF)と記述できるが、分かりにくくなるので多用は厳禁
- while((c=getchar())!=EOF)では関係!=の吟味のほうが代入よりも先に行われる
- intとlongは機種によって同じサイズかもしれない
- whileやforはループに入る前に、頭のところでテストを行い、何もすることがなければループに入らない
- 'A'はAという文字定数、ASCIIでは65になるので65と比較しても問題ない
- エスケープ文字は文字定数でも有効
- 上記65とするよりも'A'とするほうが明示的なので、'A'とするほうがよい(特定の文字セットは独立)
- int nl,nw,nc;としたときnl=nw=nc=0;と代入可能
- ANDはORよりも優先度が高い(&&>||)
- if文中では&&や||でつながれた式は右から左に評価される
- 添字は0から始まる
- switch文はテスト条件において整数や文字式が定数群と一致するかを調べるときに適している
- charは小さな定数
- 関数は中身に関して何も知らなくても使えるブラックボックスのように便利なもの
- 関数を作ることはプログラムの複雑さに対処できる方法
- うまく設計された関数に関しては、如何に処理されるかよりも何ができるかを知っておく
- 一つのソースにまとめても二つ以上に分割にしてもよい
- 複数のソースに分割したとき、コンパイルやロードに時間がかかるけれども、言語というよりもOSの問題
- 関数内で使われる名前は、関数内での局所的なもので他からはアクセスできない
- 関数定義内のカッコ内のリストの変数は仮引数、関数を呼び出す側は実引数
- 通常、戻り値が0なら正常、0以外は異常としているかエラー終了状況としている
- プログラムは環境に対して状態情報を返すべき
- プロトタイプ宣言は関数定義と一致させるが、引数の名前は一致させなくてもよい
- main関数の前に書くよりもコンパイラのチェックが利く、後ろに書くほうがよい
- 引数の値を操作して引数値を返すこと
- 呼ばれたルーチン内では初期化された局所変数となる
- 必要となれば呼び出しルーチン内にある変数を利用できる(呼び出し側は変数のアドレスで呼び出される側はパラメータがポインタであることを宣言し、間接的に実際の変数を参照)
- 配列を引数としたときは、先頭のアドレスが値として渡される
- 文字配列の末尾は"¥0"のナル文字
- オーバーフローに注意する
- 局所変数はルーチンから離れれば消える(自動変数)
- 自動変数の値は保持されない
- 関数の入り口で値をセットしないと不定値が入る
- 外部変数は関数が呼ばれたり、終了したりするごとに現れたり消えたりせず永久存在
- 外部変数としたければextern宣言を
- 分割コンパイルの場合はextern宣言が必要(ヘッダ記述)
- 定義は変数が作られ記憶が割り付けられること
- 宣言は変数の性質は指定されているけど記憶は割り付けられていないこと
- 外部変数は少ないほうがよい(予期しない変更、後から変更不可、データ結合が不明確)
基本的なことばかりです。