13.2 テキストとバイナリ
13.1 ファイル
12.2 構造体メンバ
9.2 文字列の配列
9.1 文字列
8.5 入出力と文字
8.1 マクロ
オブジェクト形式マクロ オブジェクト形式マクロとしての #define は、次のような形式で記述します。 #define マクロ名 置換後の文字の並び 強制されているわけではありませんが、一般的にマクロ名は大文字で表記することが多いです。また、置換後の文字の並びは空にしても構いません。 コンパイルを行う直前で、ソースコード上の文字を置換し、その結果をコンパイルするのです。そうすることで、ソースコードの見た目を読みやすいまま保ちつつ、高度な処理を実現できます。 関数形式マクロ 関数形式マクロは、使用時の記述が関数を呼び出しているように見えるため、このように呼ばれます。関数形式マクロの定義は、次のように行います。 #define マクロ名(仮引数のリスト) 置換後の文字の並び マクロ名の直後に ( ) で仮引数を指定する点が、オブジェクト形式マクロとの違いです。ただし、仮引数に型の指定はありません。仮引数がない場合は void とは書かず、単に ( ) の中を空にします。 通常の関数と異なり、マクロの場合はプリプロセスの段階で置換済みであることを忘れないようにしましょう。関数を呼び出すという行為そのものにも処理時間がかかるのですが、マクロの場合はこの呼び出し自体が発生しませんから、処理効率は向上します。 一方で、マクロを使っている箇所が個別に置換されるため、使用箇所が多いと、プログラムの大きさは増大しやすくなります。 なお、関数のように使うため、置換後の結果を複数行に渡って記述できた方が、見た目の上でも分かりやすくなることがあります。しかし、マクロの置換結果の中で普通に改行を行うことはできません。マクロの置換結果の中で改行を行うには、行末に \ を置きます。 #define INITIALIZE(a,b,c) \ (a) = 0; \ (b) = 0; \ (c) = 0; 特に、\ の後ろには改行しかあってはならないことに注意してください。 演習 演習 8-1 二つの値xとyの差を求める関数形式マクロを定義せよ。 diff […]
7.4 演算子の優先順位
表の上に位置するほど、優先順位が高くなります。 優先順位 演算子 名称 使い方 1(高) () [] . -> ++(後置) ーー(後置) 関数呼び出し 添字演算子 ドット演算子 アロー演算子 インクリメント(後置) デクリメント(後置) func() num[0] pos.x pPos->x num++ num– 2 + – & * sizeof ! ~ ++ ーー 正符号 負符号 アドレス演算子 間接参照演算子 サイズオブ演算子 論理否定 ビットの論理否定 インクリメント(前置) デクリメント(前置) +num -num &data *pdata sizeof(num) !num ~num ++num –num 3 (型名) キャスト […]
7.2 整数型と実数型
10進数、2進数、16進数 2進数 10進数 16進数 2進数 10進数 16進数 0 0 0 10001 17 11 1 1 1 10010 18 12 10 2 2 10011 19 13 11 3 3 10100 20 14 100 4 4 10101 21 15 101 5 5 10110 22 16 110 6 6 10111 23 17 111 7 7 11000 24 18 […]
12.1 構造体
演習 1)任意二つのunsigned int型数値の論理AND, OR, XORを求めなさい(P324) /* a9-4-1.c */ #include <stdio.h> #include <limits.h> int main(void) { unsigned a, b; printf(“0 〜 %u の整数を2つ入力してください。¥n”, UINT_MAX); printf(“> “); scanf(“%u”, &a); printf(“> “); scanf(“%u”, &b); printf(“%u(%#x) AND %u(%#x) = %#x¥n”,__,__,__,__,__); printf(“%u(%#x) OR %u(%#x) = %#x¥n”,__,__,__,__,__); printf(“%u(%#x) XOR %u(%#x) = %#x¥n”,__,__,__,__,__); return 0; } 2)任意unsigned int型数値のビットパターンを表示(P328) /* a9-4-2.c */ […]