Open5

C言語の復習

無職の学び舎無職の学び舎

変数定義、繰り返し、条件分岐、画像にはないけど足し算とか掛け算などの演算は他の言語と大差ない。
というかほぼ同じ。
C言語にはbool型がないので、別の型をつかってなんらか判断する。
ただ、無職の場合は基本C++を使うし、C++にはboolがあるのでさほど意識したことはない。

無職の学び舎無職の学び舎

typedef による型の別名定義

int型は基本4byteだけど、実際は環境依存で4byteとは限らない
なので4byteのつもりでintと書いてると環境変わった時に死ぬ可能性あり。

typedef int s32のように符号付き32bit(4byte)の型だと定義しておき
プログラム内では再定義して使う方法をよくやる。

typedef int s32;

int main(void) 
{
	int a1 = 1; // こう書かず
	s32 a2 = 1; // こう書く
}

intが2byteな環境にコードを移植する場合
typedef long int s32;のようにtypedefの定義だけ変えて4byteに揃えてあげればよくなる。

そんなわけで以下のように基本の型はtypedefで定義しちゃうのがオススメ。
書く時も短くなるし、何byteの変数扱ってるかを意識しやすくもなる。

typedef char c8;
typedef wchar_t c16;
typedef char s8;
typedef short s16;
typedef int s32;
typedef long int s64;

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long int u64;

typedef float f32;
typedef double d64;
無職の学び舎無職の学び舎

メモリをちゃんと見る

Visual Studioのデバッグを使うと変数の中身やメモリの中を確認できる。
C言語の難しさは書き方もあるが、何よりもメモリのイメージができているかが大きい。

Visual StudioなどのIDEを使って、実際にメモリを見てみると習得しやすくなる。

無職の学び舎無職の学び舎
int main(void) 
{
	char* str = "Hello World";
	return 0;
}

このコードをビルドしてできた実行ファイルをバイナリエディタで開くと

"Hello World"という文字列が実行ファイルの中にある事が確認できる。