タグ

Cに関するhigeponのブックマーク (11)

  • Evil C

    The "goes toward" operator'void doStuff(int count) { while(count --> 0) { fleh(); } }This was later popularized by ECMAScript. The cast-to-bool operatorNode *left, *right; int childCount() { return !!left + !!right; }Optimization, the Microsoft way This was found in the 2004 leaked Windows sources __inline BOOL SearchOneDirectory( IN LPSTR Directory, IN LPSTR FileToFind, IN LPSTR SourceFullName, I

    higepon
    higepon 2007/11/13
  • switch - 主題のない日記

    知人が C のこんなコードを持ち出してきた。 switch(0){putchar('A');} これは普通は実行しても文字 A は出力されないのだが、 Borland C では出力されるのだそうだ。 で、規格 (JISX3010) ではどうなっているのかと調べてみた。出力されないのが正しいようだ。要約すると「制御式の値に対応する case ラベルに跳び、対応する case ラベルが無い場合は default ラベルに跳ぶ。 対応する case ラベルも default ラベルも無ければ何もしない。」ということである。 上の例では対応する case ラベルも default ラベルも無いのであるから何もしない。 定義としては実にシンプルなもので、感覚的にも特に逸脱してはいないと思う。 規格の switch 文の記述内で興味深い例を見付けた。 以下がその例を引用したものだ。 switch(ex

    switch - 主題のない日記
    higepon
    higepon 2007/06/15
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    higepon
    higepon 2006/08/08
    処理系速度比較
  • binfmtc - binfmt_misc C scripting interface

    binfmt_misc C scripting interfaceとは C言語を愛している,C言語でプログラムを書くことに快感を覚える. 毎日Cでコードを書いていないとなんとなく体調が悪い気がする. 最近との会話はC言語がないとなりたたない. だけど,C言語でスクリプトも書いてしまいたいのに,インタプリタ言語のほうが 実行までの手間がすくないのでついついそっちを使ってしまう. そんな症状のあなたに朗報です. 従来,シェルやperlなどのスクリプト言語にたよってきた場面でも Cを使ってしまえるためのハックがbinfmtcです. また,C言語来の書式でコマンドを発行できるreal CSHを例として配布しています. 我々が過去10年以上使い慣れて来たC shellとは違う,真のC shellの使い味をお楽しみください. スクリーンショット C言語,アッセンブリ言語,C++言語でのスクリプトを

    higepon
    higepon 2006/06/13
    動機がおもしろい
  • malloc書くの流行っている? - higepon blog

    プログラマーの中ではmalloc/freeを実装するのが流行っているようです。(ぉ http://diary.okotama.org/?date=20060407#p03とか、id:shinichiro_h:20060404#1144138419。 mallocの実装は誰かから割り当てられたメモリ(例えばOSから割り当てられたメモリ)を、管理するという点だけに絞れば難しいことではありません。 でも割り当てられるメモリのサイズや頻度によって、断片化したりとか速度がでないとかいろいろあるので実装のアルゴリズムの選択には注意が必要です。 Monaの中でもカーネル・ユーザーランドともにmallocがあるのですが一時期自前でファーストフィットで書いていました。 すると、ユーザーランドのアプリにmalloc/freeを繰り返されて遅いことが発覚。 がんばってチューニングしたら速くなったんだけど、ため

    malloc書くの流行っている? - higepon blog
    higepon
    higepon 2006/04/07
    ↓あー。僕も丸写ししたことあります。
  • Doug Lea の malloc (dlmalloc) - bkブログ

    Doug Lea の malloc (dlmalloc) 小さなオブジェクトを大量に new しまくるプログラムを C++ で書いたところ、処理時間の多くが malloc() に費やされていることがわかりました。このような場合、自前でメモリ管理を行って最適化するという方法がありますが、なかなか大変です。 そこで、安易に高速な malloc に置き換えてみようということで、 Doug Lea の malloc (通称 dlmalloc) の最新版を試してみました。 dlmalloc の使い方 dlmalloc は 1ファイルをダウンロードしてビルドすれば使えます。次のように実行すると共有ライブラリ libdlmalloc.so を作れます。現時点でのバージョンは 2.8.3 でした。 % wget ftp://g.oswego.edu/pub/misc/malloc.c % gcc -O2

    higepon
    higepon 2006/04/03
    んあ。Mona出使っているなぁ。
  • Cのプログラムの中でブレークポイントを設定する - bkブログ

    Cのプログラムの中でブレークポイントを設定する Cのプログラムをデバッグする際には GDB などのデバッガが役立ちます。通常、ブレークポイントはデバッガの中から設定しますが、デバッグ対象のCのプログラムの中で設定することもできます。 Linux なら #include <signal.h> して、任意の箇所に raise(SIGTRAP); を挿入すれば OK です。 raise() 関数を用いて SIGTRAP シグナルを発生させています。 あるいは x86 限定なら __asm__("int3"); でも OK です。ここでは SIGTRAP を発生させるために int3 (0xcc) 命令を埋め込んでいます。GDB もソフトウェア的にブレークポイントを設定するときは当該箇所に int3 を書き込んでいるので、やっていることは割と似ています (GDBの場合は int3 を書き込む部分の

    higepon
    higepon 2006/02/06
    知らなかった
  • 善意を装う C コンテスト | スラド

    tamo 曰く、 "2005 Underhanded C Contest が告知されています。 読みやすくて安全に見えるけどこっそり悪いことをする、という C プログラムを募集するもので、 今年のお題は「画像処理をするだけのように見せかけて、識別情報を埋め込む」です。 FAQ によると、 目的は何かを批判・攻撃することではなく、コードレビューの必要性を啓蒙すること もし必要であれば、プラットフォームへの依存、C++ の使用、外部ライブラリの使用も可 賞品のビールが気に入らない場合は代替品を要求することも可 とのことです。"

    higepon
    higepon 2005/06/13
  • regex.hの使い方

    Cの言語仕様そのものには正規表現は含まれていないので、C言語で正規表現を扱うには何らかのライブラリを利用する必要があります。ここでは、POSIX準拠のregex.hを利用して正規表現の処理を行います。 UNIXライクなOSなど、POSIX準拠のシステムであれば使用できるはずです。このページのサンプルなどはLinux上のgcc-2.96でテストを行っています。 使用方法 regex.hでの正規表現の基的な使用方法を簡単に述べると、次のようになります。 regcomp()で正規表現をコンパイル regexec()で実行 regfree()でコンパイルした正規表現を解放 多少面倒なように見えますが、正規表現ライブラリとしてはごく一般的な手順です。正規表現による検索処理の前に正規表現の文字列をコンパイルし、検索処理を行った後に処理に使ったバッファを解放する必要があります。 ということで、関数をひ

  • regex Tips

    Copyright (c) 2001 Koichi OKADA まず「取扱説明書」をお読みください。 はじめに regex とは regex ってのは POSIX 準拠の正規表現ライブラリです。 POSIX 準拠のシステムでは標準で準備されています。 正規表現というのは任意のテキストを検索する際に便利な表現方法です。 最近流行りの多くの Script 言語でも採用されています。 C は特に文字列の処理が不得手なので知っておくと便利です。 GNU Rx GNU Rx とは POSIX 互換の正規表現ライブラリです。 POSIX の regex と同名の関数が使えます。 GNU Rx 特有の機能もありますが、ここでは解説しません。 win32(VisualC++) 向けの Software / GNU Rx(librx) で公開しておきます。 ライセンス reg

  • Manpage of REGEX

    Section: Linux Programmer's Manual (3) Updated: 2008-05-29 Index JM Home Page roff page 名前 regcomp, regexec, regerror, regfree - POSIX regex 関数 書式 #include <sys/types.h> #include <regex.h> int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); size_t regerror(int errcode, const regex_t *preg,

    higepon
    higepon 2005/06/03
    Cで正規表現
  • 1