kagamihogeの日記

kagamihogeの日記です。

C

warning には意味がある - 2

先のエントリの続き的な内容。今回は動作不良ではなく、C の懐の深さを垣間見ることになりました。とりあえずコード。int aresore1(int *foo, int *var) {...} int aresore2(int *foo, int *var) {...}先に書いたエントリのコードの特徴(関連する関数をまと…

webプログラマーのカルチャーショック

Javaの宣伝文句の一つに「write once, run anywhere」があります。「write once, run once」なんて皮肉られることもあるので、完全にはうまくいってません。が、今私がいる環境からすると「write once, run anywhere」はかなり高いレベルで実現されてるよう…

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

amazon:ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道CやJavaで一通りのプログラムは書けるが、Linux上でCを書くことはまったくやったことがない人のための入門書。今の俺には最適の一冊でした。本書の内容の多くは、Linuxは…

C言語とたくさんのif分岐

C

基本的な処理はほとんど共通なんだけど、所々でタイプごとに異なる処理を行う必要がある・・・なコードを考える。Javaの場合はポリモーフィズム使えば大概は上手くまとめられるのだが、Cではそうもいかない。率直にかけば do() { 共通処理1(); if (type == A) {…

Direct I/O で入出力

C

CでDirect I/O を行う場合、open 呼び出しの引数にO_DIRECTを指定する。インクルードするヘッダーはfcntl.hで、実際に定義されているのは bits/fcntl.h。今のところ一番新しいcygwin gccだと、fcntl.hだけでコンパイルできるけど、linux上だとこれだけではダ…

深く考えない行動の結末 - 低水準入出力

深く考えずにこんな感じのコードを書いていた。while (1) { ssize_t ret = read(fd, buf, 1024); if (ret == 0) { break; } if (ret int errno_hoge = errno; printf("ERROR! no=%d\n", errno_hoge); break; } }これはまぁ特に問題なく終わる。 で、readの部…

UMLモデルをどうやってC言語に落とし込むか

UMLモデルをどうやってC言語に落とし込むか今、正に直面してる問題に関しての記事。設計をUMLで書いてるわけじゃないんだけど、長らくJavaやってきたので、その知見をCに活かす方法は模索中なのです*1。とはいえ、記事は当り障りない範囲に収まってる感じで…

データ破壊

ここのところ低水準入出力ルーチン使ってディスクを読み書きするコードを相手にしています。その時にやってしまった衝撃的な失敗。それは、ディスクに書き込みを行う機能で、大量のデータを投入したらどうなるかのテスト中のこと。途中までは上手く行くのだ…

C言語の例外とエラー処理

C

Cは例外処理機構がない。例外がない言語を使ってはじめてわかるありがたさ。Cの場合、エラーの扱い方は基本的に関数の戻り値でやります。エラーコードとかNULLとか不正値返したりとか。出力パラメータで同じことやる、ってのもあるかな。なので、エラー処理…

writeの使い方

C

(06/04/17) C言語: write(2)の正しい使い方一度write使う関数書いてしまえば後はソレ使うだけなんだけど、忘れないようにメモ。ここのところCを触り始めて思うのは、知っておかないとマズイことがすごい多い。別にCに限ったことじゃないだろうけどJavaに比べ…

unionに驚く

C

昨日、UNIONすげーって書いたが、ホントキモいというか感動的というか。その辺の感想。unionはこんな感じに定義する。ちなみにchar=1バイト、short=2バイト、long=4バイトを想定。 typedef union { unsigned char char_data[4]; unsigned short short_data[2…

openとread

Cでファイル入出力するやり方はいろいろあるが、今回はバイナリ読み出しが必要なので低水準ファイル入出力を使うことに。 やはり、原理を理解してはいても失敗するものはするものだなぁと改めて思ってしまいました。 失敗内容の概要 とりあえず、コードはこ…

Eclipse CDT + MinGW

C

EclipseでC/C++開発環境を実現するという脅威のプラグイン、それがCDT。導入などがちょっとクセあるので、再セットアップなんかのときに困らないよう関連URLなどをメモ。 関連サイト こっちのサイトのほうが断然良くまとまってるし、詳しいです。Eclipse wit…

スタックとヒープ

わかっているようで全然わかっていなかった。これじゃJava厨と呼ばれても仕方ない・・・。プログラマのためのメモリとポインタの基礎 このテの内容を扱った文献はたくさんあるけど、とりあえずこれをメモ。最近ちょっとCを触っているのだが、いわゆるリスト処理…

手続き型とオブジェクト指向はそんなに違うものかな

C

今回生まれて初めてヘッダー書きーの実モジュール書きーのをやったわけだが、インタフェースの公開/隠蔽はオブジェクト指向のそれと根底ではなんも変わらないなぁと思いました*1。コレのおかげでクラスってすげぇじゃん、と改めて感動してしまいましたよ。ち…

includeにハマる

C

Javaでは複数クラス使っての開発経験はあるが、Cでモジュール分割する手法はぜんぜん経験がない。つーわけでちょっと興味半分で試して見たが、見事にハマった。まず、ヘッダーなんかの構成をこんな風に書いてみた。 /* hoge.h */ struct hoge {...}export vo…