C

配列とポインタ

C

念の為に書いておくと、配列とポインタは明確に違うもの。 そのあたりを誤解していると、 void func(int **a); int a[2][2]; func(a); がコンパイルエラーになることが理解出来ないんじゃないかな。 もちろん、 void func(int *a); int a[2]; func(a); はOK…

log2

C

ref:Cozy Ozy - Sliding Window トラックバック元のコードを読んでいて、アレ?と思った。ショートコードに挑戦している人たちでもやってしまうものか? さて、以下のコードの問題点は何でしょう。 /** * Returns binary logarithm of n. */ int intlog2(int…

epoll を使った echo サーバ

自分用メモ。epoll & Non-Blocking IO による echo サーバの例。 使い方のテスト以上のものではないので、そのままではいろいろまずい。epoll_create や socket で取得した file descriptor を close してなかったり。まねしないように。 #include <stdio.h> #include <stdlib.h></stdlib.h></stdio.h>…

使わない仮引数

C

signal handler だとか、POSIX Thread の start routine なんかでは関数の仮引数を使わないなんてことは良くあると思うけど、これだと gcc で -W オプションを指定すると "unused parameter" とか言われてうっとうしかったりする。 でまぁ、そういうときは、…

realloc

C

ref:Webサービス日記 - CodeSearch でだめコードを探すテクニックを探求する ありがちですねぇ。以前比較関数の話を書いたら割と反響がありましたが、Google CodeSearch でまずい比較関数を探すのは難しそう。て、関係ないな。 さて、以下のコードのまずい点…

やっぱりアセンブリ

C

RMQの件をメールしたら「インラインアセンブリで bsf と bsr を使えばもっと速いよ」(意訳)という回答が来てがっくりな今日このごろ。 ちなみにトータルで倍くらい速くなるようです。やっぱり 時代は Binary 2.0 か。

RMQ高速化

データ系列の任意区間から最小値(もしくはその位置)を取得する操作を Range Minimum Query というのだが、これは n 個のデータに対して O(n) の前処理をしておけば O(1) で計算できることが知られている。 で、その実装が九州大学の坂内さんのページで公開さ…

ブロック内の変数

C

関数の内部でブロック作ったときってその中で変数を新たに宣言したときに 新しくスタックフレームを構成するってこと? んなことしたら、そのブロックの中で外側のローカル変数アクセスするときに大変じゃん (gccは関数内関数でそういうことをやるけど)。 関…

deference

dereference を日本語にしようとすると悩みませんか? referece は「参照」で固まっちゃってますが、dereferece を日本語の名詞で表そうとすると ぴったり来るものがないと思うのですが。 イメージ的には、「参照(先)を手繰る(or 辿る)」といったものなんです…

Cの老害

UNIX と C ってのは,やっぱり最悪のコンピュータウィルスだな.この 2 老害のせいで,計算機科学の発達は 20 年遅れた.こいつらのバッドノウハウにそそぎこまれた, 確かに autotools とかバッドノウハウ以外の何者でもないよなぁ。ないともっとアレなんだ…

Cが使われる理由 #2

C

そういえば弾さんって以下のような発言もしてるんだよなぁ。 もちろん、それはJavaに汎用性がない、ということではない。実際Javaは「言語を実装する言語」となれるほど豊穣な言語ではある。 これで、言語処理系を実装するには『「世界の底」に直接する必要…

Cが使われる理由

C

そうなのです。PerlもPHPもPythonもRubyも(アルファベット順)、みいぃんなCで書かれているのです。 「この言語を書くための言語」という役割において、Cに置き換わるものというのは未だにありません。確かに一部C++やJavaに置き換わったり、GHCのように処理…

*p++ #2

C

意味も無く時間差をつけて言及。もとの話はこことここ。 えーと、*p++ が推奨するようなものでもないというのは、わけて書いたほうが良いとか、いまどきなら生成コードは同じとかいう話でなくて、ポインタ演算しないといけない場面、ポインタ演算したほうが…

MapViewOfFile と CRC32 の計算

C

mixi のC言語コミュの某トピックがなぜか Kusakabe さん作 CRC32 vs FastCRC な流れになっている。 団子厨氏の絡んだ現在の流れ自体に言いたいことがないではないが、とりあえず MapViewOfFile による Memory Mapped File な CRC32 の実装とかしてみた。Pent…

*p++

C

mixiの某コミュで、*p++ のような記述の仕方はわかりにくいから止めろと主張する人がいた。 んー、いくらなんでもC使おうという人がこれを読めないのは問題ありまくりのような 気がするんだけど。カッコつけろともいってたような気がするけど、これは (*p)++…

strdup

C

char *new_string(char *str){ char *new = (char *)malloc(strlen(str)+1); if (new == NULL) DIE_OUT_OF_MEMORY; strcpy(new, str); /* it's okay not to use strncpy */ return new; }なんで strdup を使わないのだろう。メモリ確保エラーの処理を一元化…

Apache Module 以外から apr を利用する

C

MODULE.JP - Apache Portable Runtimeをあなたのプロジェクトに取り込む 久々にApache Moduleのデバッグをしておかげで、また apr (Apache Portable Runtime) のお世話になった。そのおかげで、もうCでプログラム書くやつはみんな apr を使えばいいんじゃね…