programming
先日のエントリで、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[]の要素数をカウントす…
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…
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に近づいたときなどのエラー処…
http://www.yodobashi.com/enjoy/more/i/8973941.html VC++2005が目前に出るというのに、急いでVC++2003を買ったのには理由があります。マイクロソフト社が.NET戦略を打ち出してからというもの、プログラミングしやすいコードを書きやすくなってきたという潮…
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では使う性格が違う…
Eclipseのパッケージは最新版、それも安定版ではなくて開発版のマイルストーンを使うのが一番よいのかもしれない。単独のパッケージならば安定版だけで他とは連携しないのでいいのかもしれないが、オープンソースのようなソフトウェアはどんどん先に行ってし…
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…
http://sourceforge.net/mailarchive/forum.php?thread_id=7373361&forum_id=43850 どうもlibpngを使うと、libpngを使ったウェブにあるサンプルのソースコードがクラッシュしてしまうので、何か変だな思って、普段使っているMinGWやVisualC++のコンパイラで…
やっとのことで二値化のプログラムが完成した。なぜかメモリ操作にバグがあったらしく、ホワイトノイズの画像(テレビの砂嵐)ができてしまっていたのを修正した。どう修正したのはおぼえていない、というより一般的にバグを再現するのは難しいことである。…
二値化は離散化したデータをさらに0か1に決めるというものです。その境界線を決めるには手動でやってもいいのですが、やっぱりデータがあってパソコンを使ってしかもプログラミングを編むということでプログラムを書いてみました。あんまり出来は良くないか…
なぜだかgccでは成功するのに、Visual C++では失敗するこのソースコードの問題点はどこなのか探すのに途方に暮れている。やっぱりC標準ライブラリの違いなんだろうか。それにしても、30行のソースコードのどこがどうコンパイラによって違ってくるのか分から…
今までコンパイル済みのMinGWを使っていたのだが、やっぱり最新の版を使いたいということでGNUのほう(もちろんring.gr.jpのミラーから)からソースを持ってきてコンパイルしたところ、みごと引っかかってしまった。メッセージから読み取るとzlibでつまづい…
C言語の演算子の優先順位ってけっこう微妙なところがあって、括弧があるかないかでだいぶ違ってきます。こういう例はあんまりないのでバグの原因になったりするかもしれないので要チェックです。 これは i = 1 です。 #include <stdio.h> int main(void) { int i; i =</stdio.h>…
こんなコードでも動くからすごい。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { NULL; // 文法上、空行を入れるところに入れるとVC++で警告がでない。 exit(EXIT_SUCCESS); }具体的な使い道はこんな感じです。 while(true) NULL;</stdlib.h></stdio.h>
BohYoh.com【C言語講座】標準ライブラリ標準ってなんだかベンダ固有よりも機能に劣ると思っていたが、探してみるとけっこう掘り出し物とかあったりする。
アサーションというのはassert()のことで、プログラム中で「これこれの変数は〜だと思う。違ったらエラーを出してくれ」と指示するデバッグ用のC言語標準の関数(正確にいうとマクロなのだが)である。これを使うと、デバッグ効率が高まる。いちいちprintf()…