国際化プログラミング by World Wide Navi
実際の計算は、FLOAT=float 型、DOUBLE=double 型、LONG_DOUBLE=long double 型のもつ範囲と精度で行われる 例えば、FLT_EVAL_METHOD が 1 の時は、float型 ← float型 + float型 の計算でも、float型 ← (float型)((double型)float型 + (double型)float型) として計算が行われる。計算途中でも浮動小数点型の表現範囲とその精度が異なると、同じ値で同じ計算を行っても結果が異なることがある。 8.3 math.h 今回、math.h の内容がかなり power up されています。すごいボリュームで書くのが嫌です。新しくマクロ、typedef、関数が追加されたのに加え、ほとんどの関数には double 型、float 型、long double 型を引数として受け取り、結果をその型
この間の続き。 Inf/NaNは計算の失敗時に発生する値。 この値がでるとそのあとの処理はうまくいかない。 そのときに判定を間違えると面倒だよ。。 if( _finite(value) != 0 ) // Inf/NaNである Inf/NaNを判定するには、_finite を使うこと。 if( DEF_NaN == value ) // NaNである なんてことはできないよ。 >俺! あとは、参考。 #include <iostream> #include <limits> const double DEF_Inf = std::numeric_limits<double>::infinity(); const double DEF_NaN = std::numeric_limits<double>::quiet_NaN(); void printf_okng(bool f) { if(
オープンソースなソフトウェアをダウンロードしてきて、 $ ./configure $ make $ su - # make install という手順をよくやると思う。 この便利な仕組みを作ってくれるのがGNU Autotoolsなわけだが、 よく見る仕組みであるにも関わらず、tar-ballを展開した中にある 一連のファイルが何をしているものなのか、意外と知らなかったり するので、それぞれどんなものなのか書いてみた。 ●GNU Autotools configure/make/make installなプログラムを作るためのツール。 autoconf, automake, autoscan, autoheader, aclocal, libtoolなど からなるツール群のこと。 ●autoscan configure.acの元になる、configure.scanを作ってくれる。 conf
The page you are trying to reach does not exist, or has been moved. Please use the menus or the search box to find what you are looking for.
Autotoolsの各ツールの役割と入力ファイル,出力ファイルの関係の概略について示す(それらのファイルは非常に多いので主なものについてのみ示す).ツールの出力ファイルは別のツールの入力ファイルになっていることがある.この頁により,どの入力ファイルを修正するとどのツールを再実行する必要があるかが分かる(たぶん). 流れ Aclocal Autoheader Automake Autoconf configure Make 流れパッケージを作成する際のAutotools実行の主な順序を以下に示す. Aclocal Autoheader Automake Autoconf configure(ユーザ) Make(ユーザ) 各ツールの位置付けについて以降に示す. AclocalAclocalはAutomakeのためのマクロ,Autoconfのためのマクロ,ユーザ定義のマクロなどを参照し,conf
[ C++で開発 ] Automakeでmakeする GNU Automakeを使用すると、簡単な記述でMakefileを生成してくれます。類似ツールにimakeがありますが、imakeは事実上X Window Systemの一部となっており、Xアプリケーション用に調整されているので、非Xな環境やアプリケーション開発に使う際にはやや面倒です。 Automakeの超簡単原理 Automakeは、makeコマンドでビルドするための設定記述ファイルMakefileを、極めて簡単に記述するためのツールです。通常Makefileには、コンパイルする際の諸設定、リンクする際の諸設定、処理順序などを逐一記述しておかなくてはなりません。これは、よっぽどMakefileに慣れていないと苦痛ですし、慣れていても面倒な作業です。そこで、Makefileよりもずっと簡単な設定ファイルMakefile.amだけを記
たとえば、変数 var の値を2進数で表示したい場合は、次のように指定します。 (gdb) p/t var 一覧表示 whatis 変数の型を調べる。 info b 今設定しているブレークポイントの一覧を表示 セグメントフォルトをした後に利用すれば、どの関数で発生したか確認できます。 info stack 関数の呼び出しスタックの一覧を表示 info Thread 存在しているスレッドの一覧を表示 異なるアドレスにおける処理継続 以下のコマンドを使用することで、ユーザが選択したアドレスにおいて実行を継続させることができます jump linespec linespecで指定される行において、実行を再開 jump *address addressで指定されるアドレスにある命令から、実行を再開 アドレスが分かっている場合のメモリリーク出力 xはhexの意味です。 (gdb) p (char*)
浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに x86 特有のちょっとおもしろい 現象に遭遇したので紹介したいと思います。 パーセンテージの計算 簡単な C のプログラムでパーセンテージを計算しようと思い、 次のようなコードを書きました。 int x, y; ... int a = (double)x / y * 100; int a = x * 100 / y としないのは、 x が大きい場合に x * 100 が オーバーフローを起こす (INT_MAX を越える) ためです。 このコードは一見、期待通りに動いていたのですが、 しばらく使っていると、手元の環境では x = 53, y = 100 のときに a は 53 ではなく 52 になることに気づきました。 これは次の理由によります。 式の最初の (double)53 / 10
# と ## はマクロ関数で使う。 # と ## 共に古くからマクロで実装されている。ところが、これを知らない人達がとても多い。 十年、二十年と C 言語を使ってきたという人でも知らないと言う人が結構いる。これを知らないから、余計なコードを書き、バグを増やし続けるのである。 高級言語と呼ばれる言語の中でも、単純な部類に入る C 言語。その C 言語よりも単純なマクロ言語の構文を把握していないのである。マクロ自体では、できることもたかが知れている。マクロでできるのは、ごく限られた置換や条件分岐処理程度のみだ。C 言語の構文だけでは、それこそ複数のファイルにコードを分けて書くこともできない。 ライブラリを作るのなどは、それこそ不可能だ。 しかし、C 言語はその欠点をマクロ言語を使い前処理することにより、強力な力を得た。C 言語以降もいくつもの高級言語が生まれてきたが、前処理を組み込んである言語
GDBの使い方を調べてみた.将来的にはデバッガを使えるようになって効率的な開発をしていくのだ. 入門編 応用編 GDBじゃないけど…… 入門編 基本的なGDBの使い方 とにかくちょっと使ってみる 2003-07-20T15:13+09:00 matsu gdbをとにかくちょっと使ってみた. breakポイント 2003-07-20T15:13+09:00 matsu おそらく多くのデバッグ作業はbreakポイントとステップ実行で足りるものではないだろうか.ここではbreakポイントの設定方法を中心に記述する.breakポイントはいろんな方法で指定できるようだ. watch 2003-07-20T15:13+09:00 matsu 変数値の変化を追跡できるとうれしいかもしれない. continueとステップ実行 2003-07-20T15:13+09:00 matsu breakした後処理を
Skip to contentCategory: GDB223月2007 watch変数値の変化を追跡できるとうれしいかもしれない.変数... Fujiko feature, GDB223月2007 プロファイル(gcc)2003-07-20T15:13+09:00 mat... Fujiko feature, GDB193月2007 とにかくちょっと使ってみるgdbをとにかくちょっと使ってみた.準備gdbの起動... Fujiko feature, GDB153月2007 continueとステップ実行breakした後処理を続けるにはcontinueで継... Fujiko feature, GDB113月2007 attachなんらかの理由でgdbからいきなり起動できないプログ... Fujiko feature, GDB093月2007 プログラムのフロー(cflow)ctagsやe
gdb の gcore コマンドを使う デバッガの理論と実装を読んで以来、デバッガをもっと活用しようという意欲がわいてきました。そこで、gdb について調べていると、 gcore (generate-core-file) というコマンドを見つけました。 gcore は実行中のプロセスの core を生成する gdb のコマンドです。通常、 core ファイルはプログラムが異常終了したときにカーネルによって生成されますが、gdb の gcore コマンドを使えば実行中のプロセスを終了させることなく core ファイルを生成できます。 gcore コマンドは次のように使います。 % gdb (gdb) attach PID (gdb) gcore core (gdb) detach まず attach コマンドで PID を指定して実行中のプロセスにアタッチします (gdb -p PID で起
デモ ニコニコ動画の伝説の動画 「テトリスを1時間強で作ってみた【実況解説】」という動画をご存知でしょうか? 2009年にニコニコ動画で公開されて話題になった動画です。 【ニコニコ動画】【プログラミング】テトリスを1時間強で作ってみた【実況解説】 インタビュー記事:「テトリスを1時間強で作ってみた」動画の投稿者にインタビュー──「プログラミングの楽しさ伝えたい」 この動画ではテトリスをいちから作ってわずか62分で完成させています。 しかし実はスタート直後はMinGWのインストール、EmEditorのインストールに続いてブロック画像の作成などをしており、プログラミングが始まるのは開始13分のところからです。 さらに次の10分は「空のウィンドウ」を作るために時間を使っており、実質的にテトリスのプログラミングが始まるのは動画23分のところからです。 つまり、実質的に40分のプログラミングでテトリ
前回は JSMN というのを試したけど、今度も matsuu さんのブクマから。。。 parson Lightweight json parser and reader written in C. http://kgabis.github.com/parson/ 特徴は 軽い (2ファイルだけ) 単純なAPI ドット記法による json 値のアドレッシング (C言語の構造体やOO言語のオブジェクトに似た感じ。例: "objectA.objectB.value") C89 コンパティブル テストスーツ 前回の JSMN とは違い、メモリを動的に確保するタイプ。DOM の様にルートノードから探索を始め、最終的にルートノードを指定してメモリを開放する。 今回もtwitterのタイムラインをパースしよう。 #include <assert.h> #include <string.h> #inclu
第21回IOCCCで銀賞を頂きました。とても光栄です。 http://www.ioccc.org/2012/whowon.html 自分で書いたコードですが、もう既に理解できなくなってく来ているので早うちに解説を残しておきます。 作品のテーマは最も難解な部類に入るファイルフォーマットであるPDFと、あえて難解に書いたC言語のコラボレーションです。 このプログラムはテキスト文字列を入力として受け取り、難読化したPDFファイルを出力します。 この難読化手法は、有名な推理小説「踊る人形」に登場する単一換字式暗号です。 たとえば、 % gcc -o hamano hamano.c % echo 'Hello World!' | ./hamano > hello.pdf と実行すると以下の様なPDFを出力します。 このPDFファイルは、Adobe Acrobat Readerやevince, Xpd
C 言語のプログラムの汚さで競い合う有名なプログラミングコンテスト IOCCC の今年の結果が公開されました。 ref: http://www.ioccc.org/years.html#2012 目を見張る変態ぞろいですので、ぜひご覧ください。個人的には、deckmyn 、hamano 、hou 、kang 、tromp あたりがお気に入りです。nyaruko は内容より spoiler がすごい。あれエディタでアタリなしで描いてんのかよ、という。 ぼくのプログラムが 2 つ入賞していますのでご紹介。以下、ネタバレ+自慢エントリなので嫌な人は見ないで! PiE in the sky award のエントリ Most complex ASCII fluid のエントリ ref: http://www.ioccc.org/2012/endoh2/endoh2.c ref: http://www
第21回IOCCC(International Obfuscated C Code Contest)受賞者のソースコードが公開されました。今回は日本人3名が受賞しています(The 21st IOCCC Winners、 README、 本家/.)。 「Most elementary use of C - Silver award」(銀賞)を受賞したのはTsukasa Hamano氏(本人のブログ記事)。「Most complex ASCII fluid - Honorable mention」のYusuke Endoh氏は「PiE in the sky award」も受賞しています(本人のブログ記事)。「Best one liner」は前回に続いて稲庭将棋のTaketo Konno氏。 Yusuke Endoh 氏はブログでの解説がとても親切です。この気持ち悪さでも金賞じゃないなんて、まさ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く