タグ

Cとプログラミングに関するiwwのブックマーク (139)

  • 4DM - FizzBuzz

    2010-03-22 buy_adderall 2010-03-04 buy+adderall 2010-02-23 RecentDeleted 2009-10-04 POJ2291 2009-09-11 AAA= 2009-06-20 POJ1023 2009-03-08 Short Coding 2009-01-19 anarchy golf 2009-01-17 123 AAA 2008-12-08 POJ3300 2008-12-04 POJ3300 clone 2008-11-26 POJ1032 2008-11-17 YukiWiki 2008-10-05 PKU+Judge+Online 2008-08-25 POJ1028 2008-01-12 Sphenic Numbers 2007-09-22 inverse matrix 2007-08-22 easy regexp

  • プログラミング言語 C の新機能

    7. 文法一般 この章では C 言語に新たに加えられた指示付きの初期化子や複合リテラルといった文法や、暗黙時の宣言に関する変更といった、変更された文法について説明します。 7.1 暗黙の関数宣言 現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。 7.2 宣言時の暗黙の型 手続き型言語では、一般的に変数や関数などを宣言して使用する必要があります。もちろん C 言語も例外ではありません。しかし C 言語では特に型

    iww
    iww 2010/02/22
  • 「構造化プログラミングに関する覚え書き」へと導いたもの | taro-nishinoの日記 | スラド

    明けましておめでとうございます。 さて、私の周辺では、先日に書いた"Gotoは有用である"について、折角のMatt S. Trout氏の文よりも、何故か不幸にも私の書いた訳注の方が話題になっています。 Linus氏はgoto有用論の他にも、C++をボロクソに貶したり、当に愉快な人だと私は思います。ただ、C++を貶された時の反応として、海外は置いとくとして、日の一部の人が余りにも井の中の蛙的な反応をしたように記憶しています。代表的な例は「Linusはオブジェクト指向が分からないからだ」というのがあります。私は思わず笑いました。Linus氏ほどの頭脳で分からないことが、極東の日の貴方がたは分かっていると言わんばかりじゃないですか。一部にせよ、だから日は駄目だと思いました。つまり、自己を客観視せず、実質的実力は無いのに一流家気取りなんですね。もっとはっきり言えば何様のつもりなんだと。ど

  • C言語からJavaへの移植方法まとめ - Aoisomeの以下略

    XPCEというC言語で組まれたPCエンジンエミュレータを、iアプリのJavaへ移植しています。 やっているうちに、移植手順のちょっとしたコツに気がつきました。 そんなわけで、C言語のソースから、Javaへ移植する場合の作業について、まとめておきます。 常に動作テストできるようにする Cのソースを、いきなりJavaに拡張子変更して、中身を書き換えていくという方法をとると、 すべてをJavaコードに修正するまで、動作確認することができなくなってしまいます。 Javaに拡張子変更するのは、できるだけ後にします。 Cのソースのまま、ビルドして動かせる状態を保ったままで、Javaに無い機能を置換していきます。 Javaに無い機能を置き換える Javaに無い機能というと、 ポインタ演算子 共用体 unsigned型 マクロ などです。 これらを、使わない形のCソースに修正していくわけです。 ポインタ演

    C言語からJavaへの移植方法まとめ - Aoisomeの以下略
  • 新世紀ももう世紀末 pthread と sleep & system

    ども、こんばんは。 日も休出&終電で、眠いぼにゃです(;´Д⊂)。 #ま、徹夜じゃなくて良かったけどね。 皆様は、如何お過ごしでしょうか? 日はちょびっと真面目な話。 glic-2.3.6 で以下のコードを書いて ARM上で動かすところびます。 落ちる箇所は、なんとsleep()(笑)。 x86かつ、最新のglibcだと全然問題なく動作。 なんでだろ?と思ってglibcを調べてみると、 どうも、sleep()とsystem()関数は、pthreadと相性がよろしくないみたい。 sleep()って、内部でSIGCHLD(子プロセスの終了シグナル)を受けたくないから 実行前に「SIGCHLDをブロック」しています(なんかキャンセルポイントが関係しているっぽい) また、system()って関数は、実行の際内部でfork()して実際のUNIXコマンドを実行していて、 終了の際に、「SIGCHL

  • スタックオーバーフローのハンドリング (Stack Overflow Handling)

    作成日:2004.04.12 更新日:2006.02.19 更新記録 (2004.04.12) 3/6、 3/11、 3/13 の日記をまとめて作成。 (2004.05.07) 文章を修正。サンプルコードを追加。 (2005.01.20) alternative → alterante に修正。 (2005.02.13) 追記を記述。 (2006.02.17) linux_stack_info.cpp の実装に誤りがあったので修正。 (2006.02.19) BSD 系OS でのスタック領域情報の取得の仕方を追加 初めに C/C++ でプログラムをしているとつい忘れてしまうのがスレッドのスタックオーバーフローの問題。 最近の OS はスレッド当たり 2〜8MB のスタック領域を持っているため、よほどのことがない限りスタックが溢れてしまうことはない。 だが、再帰や alloca を積極的に使

    iww
    iww 2009/11/30
    スタックオーバフローからの復帰方法とか
  • Tera Termソースコード解説

    Tera Termソースコード解説 はじめに 必要スキル モジュール構成 ライブラリ構成 プラグインサポート 設定ファイルの読み書き セキュアプログラミング 古いバージョンのWindowsとの互換性維持 デバッグ手法 マルチスレッド DDEによるプロセス間通信 TTSSHによるSSHの設計と実装 マクロ言語の設計と実装 キャレット制御 シリアルポート バイナリ転送プロトコル はじめに 文書では、Tera Termのソースコードについて解説をします。解説対象とするソースコードはバージョン"4.58"(2008年2月現在)のものをベースとしています。 必要スキル Tera Termのパッケージに含まれるほとんどのプログラムは、C言語で記述されています。一部のコードはC++言語で、MFC(Microsoft Foundation Class)が利用されています。Windows特有の処理を行うた

  • http://1978th.net/tech/promenade.cgi?id=31

  • C/C++ 迷信集 | 株式会社きじねこ

    C/C++ を使うプログラマは大勢います。しかし、その多くは OJT を通して言語を学んだのではないでしょうか? 実はそこに大きな落とし穴があります。 コンピュータや工学のことをよく知らない人たちは、時代の先端を歩むプログラマには「迷信」など無関係だと信じて疑わないかも知れません。しかし、迷信や誤解はどんな世界にも常に存在しています。 というわけで、ここでは C/C++ にまつわる迷信、誤解、よくある間違いを採り上げていきます。非常に後ろ向きな企画ですが、暇つぶし気分転換に読んでみてください。もしかすると、ご自身が迷信にとらわれていたことに気付くかもしれません。 追記(2009/03/15) このコーナーでは、C/C++ にまつわる迷信、誤解、よくある間違いを扱っています。決して「迷信」だけではないのですが、タイトルにはすべて[迷信]を付けています。 これは、主に検索エンジンでタイトルを見

  • 革命の日々! シーケンスロック その5 volatileがダメな理由

    どもども。またまた間隔があいてしまいましたがシーケンスロックな話しの続きです。 前回の記事で坩堝さんから面白い指摘をうけたので今回は予定を変更してvolatileの話をしたいと思います。 retをvolatileにするだけではうまくいかないんですよね? どういう風になるんだろ. なるほど、たしかに世のC言語の参考書を見るとvolatileはある種の最適化を妨げる効果を持つと されています。 これだけ見ると、volatileとつけるだけすべての最適化が無効になってうまく動きそうですね。 しかし、その理屈は微妙におかしいのである 多くの人が「ある種の」という言葉を拡大解釈しているがvolatileは来スレッド同期に使えるようなシロモノではないのである。 つづきは、続きを読むからご覧ください。 あと、お願い。 今回の話は前提知識がいろいろとあるので、末尾のご参考にあげたURLを読んでから 読ん

  • Linux Tutorial: POSIX Threads

    POSIX thread (pthread) libraries The POSIX thread libraries are a standards based thread API for C/C++. It allows one to spawn a new concurrent process flow. It is most effective on multi-processor or multi-core systems where the process flow can be scheduled to run on another processor thus gaining speed through parallel or distributed processing. Threads require less overhead than "forking" or s

  • 再入不可能な関数を C で実装する - いやなブログ

    再入不可能な関数を C で実装する 一度実行したら二度と中身を実行できなくなる再入不可能な関数を C で実装してみます。通常、このような関数はシングルトンなどの静的なデータの初期化に使いますが、ここではデータについては考えないことにします。 static 変数をフラグに使う まずは最も単純な方法から見ていきます。次の関数は static 変数をフラグに使って再入を防いでいます。厳密に言えば関数そのものには入ってしまっていますが、ここで気にしないことにします。 void once(void) { static int entered; // 最初は 0 if (entered == 1) { // すでに入ったことがある場合は return; // すぐ出る } entered = 1; // 初回の場合のみ、何かを実行する } この方法はシングルスレッドのプログラムではうまく動きますが、マ

  • epollのなかみ - moriyoshiの日記

    よく C10K 問題とかいって epoll(7) の話が出てきて select(2) 遅いね poll(2) 遅いねってなるんだけど、正直なところ、これらのシステムコールを実際に使ってコードを書いてみたひとはどのくらいいるのだろう。ましてや eventpoll が何やってるか知っている人はそんなに多くないんじゃないだろうか。もう O(n) だの O(1) だのって煙に巻かれるのもうんざりだ。 というわけで、2.6.26 の fs/eventpoll.c のコードを読んでみた。正直 Linux カーネルにすごく詳しいわけでもないので、誤りがあったら適宜突っ込んでもらえると幸いです。 前提知識として VFS モジュールがどうなってるかとかは LinuxのFSモジュールを書いてみる LinuxのFSモジュールを書いてみる (その2) のソース中のコメントを追ってもらえればと。 登場する構造体 e

    epollのなかみ - moriyoshiの日記
  • ビットを数える・探すアルゴリズム

    作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを

  • 一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録

    一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、

    一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録
  • Koders - Source Code Search Engine

    Synopsys is a leading provider of electronic design automation solutions and services.

    Koders - Source Code Search Engine
  • 『C言語による最新アルゴリズム事典』

    奥村晴彦『C言語による最新アルゴリズム事典』技術評論社,1991年,ISBN4-87408-414-1,2400円 大きな画像(1.1M) 1987年10月にPascalを使った『コンピュータ・アルゴリズム事典』を,1991年2月にその改訂版としてANSI C言語を使った『C言語による最新アルゴリズム事典』を出版しました(いずれも技術評論社)。そのサポートページをつくろうと思いながら多忙のためなかなかできませんでした。とにかく始めなければ……というわけで,サポートページまがいのものを作ってみました。 石田晴久ほか『コンピュータの名著・古典100冊』(インプレス,2003年)に選んでいただきました。100冊といっても日人の書いたものは20%しかなく,たいへん恐縮しています。 Frequently Asked Questions どの銘柄のC言語ですか? ほぼ当時のANSI Cドラフトに基づ

  • const char* const p = "ABC"; と const char q[] = "ABC"; はどちらがよいか、みたいな与太 - memologue

    諸事情あって、ふと前に読んだドキュメントに書いてあった細かいことが気になった。いやいつも細かいけど。 const char* const p = "ABC";より const char q[] = "ABC";のほうがいいのか?的な話。後者の方が良いらしいので、確認するととともに、すぐになんでも書くのはどうなんだと思いつつも無駄に細かく解説。いろいろ間違ってたらゴメンナサイ。C言語入門? 先に結論 共有ライブラリやPIEな実行ファイルを作る場合は、後者の書き方(const char q[] = "xxx")のほうが良さそうですね。PIEじゃない単なる実行ファイルを作るときは、最適化かけるならあんまりかわらないかも。 比較1) コンパイル時の最適化の効きやすさ 最適化といってもいろいろありますが、↓に限って言えば、const char q[] のほうが効きやすいようですね。 gcc vers

    const char* const p = "ABC"; と const char q[] = "ABC"; はどちらがよいか、みたいな与太 - memologue
    iww
    iww 2006/11/07
    const char p[] = "hello";
  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div