C言語

ライブラリを作ろう

以前、RCC2017アドカレ17日目を書いたので、その転載です。

Macでゲームボーイアドバンスのゲームを作ろう【01】

ながらく放置していたGBA用の自作ゲームを作っていきます。 今回はひとまずHello Worldのビルドまでやっていきます。 前回は開発環境を整えたので、その続き。

構造体のメンバとメモリの話

今まで、C言語で構造体のメンバはメモリ上では配列のように連続していると思っていたんですが、どうも必ずしも連続とは限らないことを知ったのでその話。

Makefileでヘッダーの依存関係を自動で解決する

今まで、Makefile書かないといけないようなある程度大きなプログラムを書くときに、ヘッダーの依存関係をMakefileに自分で打ち込んでいて、なかなか大変だったのでどうにか自動化できないのかなーって思って調べたら目から鱗だった話。

使うのか分からないリングバッファのライブラリを書いた

C++でコンテナクラスを一から書いたことがなかったので、ちょっと書いてみようと思ったんですけど、競プロで使いそうなデータ構造は目についたものは一通りライブラリ化してあったので、使うのかは分からないけど、リングバッファを書いてみました。

C言語で画像→アスキーアートコンバータを作る

C言語での画像ファイルの取り扱いをやってみたかったので、指定した画像ファイルを自動でアスキーアートに変換して、標準出力に吐くプログラムを作ってみました。 github.com

stderrとstdoutについてのあれこれ

printf("hello world")とfprintf(stdout,"hello world")が同じことをしてるのはよく知ってると思います。 じゃあfprintf(stderr,"hello world")との違いは?って聞くと、多分「標準出力と標準エラー出力だから出力先が違う」みたいなこと言われるんですけど…

C言語で2048を作る

エスケープシーケンスを使って、ターミナルでも色変えたり太字にしたり、なんやらかんやらができることを知ったので、2048を作ってみました。

doubleとfloatの計算速度の話

C言語ではdouble型とfloat型の計算速度に違いがあることを知ったので、その話です。 float型の方が速い? double型は64bitでfloat型は32bitなのだから、普通は精度の低いfloat型の計算の方が速そうな気がしますが、実はdouble型の方が少し速いみたいです。 …

色んなアルゴリズムでビット数をカウントしてみる

ビット数をカウントするアルゴリズムには色んな種類があるそうで、そのうち4つのアルゴリズムのC言語による実装とベンチマークです。

実引数の評価順序の話

JavaとC言語では、実引数の評価順序に違いがある話。

int = int - long の危険性

int = int - long をすると、値がおかしくなるケースがあることを知ったのでその話。

引数で受け取った配列は実は配列ではない

実はC言語には「参照渡し」は存在しないって聞いたので、色々試してたら、どうも配列を関数に渡す場合は実は配列は渡されていなかったことに気付いて衝撃を受けたので、その話。

int型の最大値は0xffffffffではない

正体不明のバグが全然取れなくて、ずっと困ってたんですけど、実は処理自体は間違ってなくて、int型の最大値を表現するのに #define INF (0xffffffff) みたいなマクロを使ってたせいでした。

Macでゲームボーイアドバンスのゲームを作ろう【環境構築】

GBAソフトを個人で開発する世界を知って、C言語で全部書かれているので、Cしか満足に使えない(もしかしたらCも満足に使えてない)僕でもGBAソフト作れるんじゃね?ってことで、まずはMacのGBA開発環境から構築したのでそのまとめ。