programming

C++とアセンブラをやる意味

先日のエントリで、C++とアセンブラを毎日やることに何かしらの意味があるんだろうといろいろ考えた。その結果、たぶん自分が普段考えているレイヤーの上位と下位で物事を考えるという訓練だという結論に達した。人間の思考回路はだいたいべたで書くようなC…

学生のうちにプログラムを書き始めると言うこと

最近、といってもずいぶん昔からだが、プログラマは使い捨てという概念がある。35歳定年説ってやつだ。まさに使い捨てである。定年って事は、それ以上進まないって事を意味している。つまり、プログラマはどんなにがんばったって35歳までしか仕事が無い事に…

超古代文明を垣間見た気持ち

製鉄所では、いろいろな製品を製造するために、いろいろなラインがある。その裏で働いているのが、ラインのモーター類を制御するコンピュータである。コンピュータには三種類あり、生産物の全般的なコントロールをするオフィスコンピュータ(OC)と呼ばれる…

昨日の続き

ENDをNULLポインタで書き換えることができたのでここにコードを書いておく。 /* * 2006年2月5日 * *str[]の要素数をカウントする */ #include <stdio.h> #include <stdlib.h> #include <string.h> char *month[] = { "January", "February", "March", "April", "May", "June", "July", "Au</string.h></stdlib.h></stdio.h>…

要素数カウンター

*str[]の要素数をカウントするためのコードを書いてみたけれども、なんか番兵に相当するENDってかっこわるい気がする。これをNULLに書き換えようと思うのだけれども、素直に書き換えただけではだめらしい。 /* * 2006年2月4日 * *str[]の要素数をカウントす…

C++の本のコード

http://www.cs.rpi.edu/~musser/stl-book/index_3.html STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子出版社…

スレッドを使ってみる

http://sources.redhat.com/pthreads-win32/ Windows環境ではPosixスレッドを直接扱えないので移植用にこういうライブラリがある。これを使ってコンパイルしてみたらDLLを呼び出すようにしてきちんとコンパイルしてみたら通るし、実際に実行もできたりする。…

マルチスレッドについて

マルチスレッドというのはひとつのメモリ空間に複数の動くPC(プログラミングカウンター)を動作させるものである。マルチスレッドのコンパイル作業は少し煩雑になる。 gcc(MinGW) の場合 そのまま。(Cygwinだと -mno-cygwinオプションをつける) > gcc thr…

VCEEというものが公開された

http://msdn.microsoft.com/vstudio/express/visualc/ VC++2005の一番最初のエントリーモデルらしいのだが、本格的なプログラミングにも耐えられるようなものができたらしい。ただ、コンパイラの高度な最適化がないだけで、十分おもしろそう。まあ、コマンド…

おもしろい

C:\Program Files\Microsoft Platform SDK\Samples\Begin\Simple\Simple.cにある Microsoft Platform SDK のサンプルファイルを見てみたら下のようなプログラムを見つけた。なんかこういうサンプルでも楽しいような要素があるとよいと思う。 #include <stdio.h> main(</stdio.h>…

環境定数

環境定数については取り出す関数があるかもしれないけれども、main()の引数として取り出すことができる。Cでは引数を適当に省略してしまって、引数が無いパターンと2つだけのパターンがよく使われるが、3つめの引数もそれなりに使えることができれば便利そ…

関数が何回呼ばれたかを記録してみる

プログラムの最適化を図るためには、どの関数が実行中に何回呼ばれたかを知らなくてはいけない。なぜかというと、最適化はすべての関数に対してする必要がないことと、使用頻度が少ない関数を最適化するより、多い関数を最適化したほうが効率がいいためであ…

三角形の外接円の中心を求めるコード

ただなんとなく学校のJavaの課題のコードがあまりにも計算機パワーに頼りがちなコードだったので、これを 外接円の中心は2つの垂直二等分線の交点 という基礎的な事実に基づいてコードを書いてみた。ちなみに a2*a6-a3*a5 が0に近づいたときなどのエラー処…

VC++2003を買う

http://www.yodobashi.com/enjoy/more/i/8973941.html VC++2005が目前に出るというのに、急いでVC++2003を買ったのには理由があります。マイクロソフト社が.NET戦略を打ち出してからというもの、プログラミングしやすいコードを書きやすくなってきたという潮…

MinGWのGCCではバイナリがでかいことの解決

http://www.sixnine.net/cygwin/translation/mingw-doc/mingwfaq.html#s1-10 より引用。 何故私の C++ バイナリはこんなに巨大なのですか? Standard Template Library (#include )を利用する C++ プログラムでは、ライブラリの大部分がバイナリに静的にリン…

文字列処理

ちょっとポインタと文字列が絡んだ時点でプログラミングがややこしくなってくることに対して、少しばかり実験を試みる。実験の目的は文字列をトークンごとに分割することなんだけれども、その分割された文字列をどう処理するべきかをポインタを用いてどうい…

新しい環境がほしい

eX.computer B30A Windows 版 インテル C++ コンパイラ 9.0 Windows XP Professional x64 Edition いちおう買えないこともないんだけど、そしたら修士に行くお金がなくなってしまうのでちょっとそれは怖いので、とりあえず修士に上がったらこのぐらいのグレ…

プログラミングの開発環境を整える

Windows Server 2003 PSDK Full Download with Local Install WindowsではWin32 APIというインターフェイスを用意している。これはC言語でOSの機能を操作するものである。もちろん.NETという選択肢がないわけではないが、.NETとWin32 APIでは使う性格が違う…

なんとかCDTのインストール成功

Eclipseのパッケージは最新版、それも安定版ではなくて開発版のマイルストーンを使うのが一番よいのかもしれない。単独のパッケージならば安定版だけで他とは連携しないのでいいのかもしれないが、オープンソースのようなソフトウェアはどんどん先に行ってし…

EclipseのCDTを使うが…

EclipseのプラグインのひとつであるCDE(C/C++ Developer Toolkit)をインストールしてみたけれどもなぜかLaunch failed no binariesというエラーでコンパイルが止まってしまう。gccはCygwinではなくてMinGWなのだけれども、それが原因で使えないとは考えにく…

画像の単純白黒化コードのバグ

画像工学の二値化でやっと濃い部分が無くなる現象がわかった。 char iで宣言された場合、i = 0xffとかだと 真っ黒な点になるはずが threshold = 100; if(i < threshold) { i = 0; } else { i = 0xff; }ifの条件判定で charの0xff、 つまり-127ってなって 255…

libpng の png_write_image() にやられる

http://sourceforge.net/mailarchive/forum.php?thread_id=7373361&forum_id=43850 どうもlibpngを使うと、libpngを使ったウェブにあるサンプルのソースコードがクラッシュしてしまうので、何か変だな思って、普段使っているMinGWやVisualC++のコンパイラで…

学校の画像工学の課題

やっとのことで二値化のプログラムが完成した。なぜかメモリ操作にバグがあったらしく、ホワイトノイズの画像(テレビの砂嵐)ができてしまっていたのを修正した。どう修正したのはおぼえていない、というより一般的にバグを再現するのは難しいことである。…

二値化の境界線を決める

二値化は離散化したデータをさらに0か1に決めるというものです。その境界線を決めるには手動でやってもいいのですが、やっぱりデータがあってパソコンを使ってしかもプログラミングを編むということでプログラムを書いてみました。あんまり出来は良くないか…

バイナリ入出力

なぜだかgccでは成功するのに、Visual C++では失敗するこのソースコードの問題点はどこなのか探すのに途方に暮れている。やっぱりC標準ライブラリの違いなんだろうか。それにしても、30行のソースコードのどこがどうコンパイラによって違ってくるのか分から…

gcc4.0.0のmake

今までコンパイル済みのMinGWを使っていたのだが、やっぱり最新の版を使いたいということでGNUのほう(もちろんring.gr.jpのミラーから)からソースを持ってきてコンパイルしたところ、みごと引っかかってしまった。メッセージから読み取るとzlibでつまづい…

式のささいな違い

C言語の演算子の優先順位ってけっこう微妙なところがあって、括弧があるかないかでだいぶ違ってきます。こういう例はあんまりないのでバグの原因になったりするかもしれないので要チェックです。 これは i = 1 です。 #include <stdio.h> int main(void) { int i; i =</stdio.h>…

NULLの効用

こんなコードでも動くからすごい。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { NULL; // 文法上、空行を入れるところに入れるとVC++で警告がでない。 exit(EXIT_SUCCESS); }具体的な使い道はこんな感じです。 while(true) NULL;</stdlib.h></stdio.h>

C言語の標準ヘッダについて

BohYoh.com【C言語講座】標準ライブラリ標準ってなんだかベンダ固有よりも機能に劣ると思っていたが、探してみるとけっこう掘り出し物とかあったりする。

朝からアサーションを使ってみる

アサーションというのはassert()のことで、プログラム中で「これこれの変数は〜だと思う。違ったらエラーを出してくれ」と指示するデバッグ用のC言語標準の関数(正確にいうとマクロなのだが)である。これを使うと、デバッグ効率が高まる。いちいちprintf()…