タグ

Cに関するagwのブックマーク (151)

  • “本物のマクロ”でCのコード行数を半分に! - @IT

    2009/09/07 毎年夏に開催される軽量プログラミング言語(LL:Lightweight Language)をテーマにした「LLイベント」。第7回目となる「LLTV」が、2009年8月29日に東京・中野で開催された。この記事ではプログラムの一部、「大改善!!劇的ビフォーアフター」をレポートする。前編では、Rubyによるfortuneコマンドの“増築”と、Firefox拡張によるslコマンドの実装というネタ系発表をレポートした。中編となる記事では、C言語にLisp風のマクロを取り入れ、lsコマンドのソースコードを約半分に“修繕”する匠の技をレポートする。後編では、売り場業務が滞りがちだった販売管理システムをbashコマンドで“建て直した”という劇的ビフォーアフターの発表をレポートする。 Cで書かれたlsのソースコードの問題点 「Real/Macro Metaprogramming On

  • はてなブログ | 無料ブログを作成しよう

    新米と秋刀魚のわた焼き お刺身用の秋刀魚を買いました。1尾250円です 3枚におろして、秋刀魚のわたに酒、味醂、醤油で調味して1時間ほど漬け込み、グリルで焼きました 秋刀魚のわた焼き わたの、苦味が程よくマイルドに調味され、クセになる味わいです 艶やかな新米と一緒に 自家製お漬物 土…

    はてなブログ | 無料ブログを作成しよう
  • 三項演算子の正しい書き方

    C・C++JavaPerl などのプログラミング言語では、条件演算子として三項演算子?:が用意されている。条件演算子の書き方として、以下のような説明がされることが多い。 condition ? true-expression : false-expression この説明は、以下のプログラムと同じ程度、間違っている。 #include <stdio.h> main( ){printf ("hel" "lo, world\n" );} 条件演算子は、正しくは以下のように書く。 condition ? true-expression : false-expression 使い方の例を示す。 compare = obj1 == null ? obj2 == null ? 0 : -1 : obj2 == null ? 1 : obj1.toString().compareTo(obj2.to

  • C - でも一番右端の立っているビット位置を求めてみた : 404 Blog Not Found

    2009年07月07日03:30 カテゴリMathLightweight Languages C - でも一番右端の立っているビット位置を求めてみた 素晴らしい。 2009-07-04 - 当面C#と.NETな記録 問題の説明はここまでにして、コードの紹介です。Hacker's delight のコードより4〜5倍速く、そして、イミフ加減が半端じゃない!これ一つで 64bit 値以下のすべての値に対応できます。 でも、実際にどれくらい威力があるか試してみたかったのでCに移植してみた。意外な結果が出ております。 0x03F566ED27179461ULL まずは黒魔術。より黒魔術っぽくしてみました。 typedef unsigned long long U64; #define HASH 0x03F566ED27179461ULL static int ntzhash[64]; void i

    C - でも一番右端の立っているビット位置を求めてみた : 404 Blog Not Found
  • C++がPythonより重い… @ 7bit

    GUI grepツールの調査過程は一応一段落し、当初のもくろみ通り製作に入ろうとしています。 今は特に苦もなく使えそうなPython, C++, C#のどれを用いるか検討中。 大量のファイルへのアクセスと正規表現のマッチは割と重い処理になりそうなので、実際にコードを書いて比較しています。 まず生grep。find | xargs grep '...'。直接Cで書かれていることを考えると、最速の基準として考えて良さそうです。日英対訳文対応付けデータ [1]をデータセットとして実験していますが、1.1秒くらいで2000ファイル近くのスキャンが終わる。 次に、書きやすそうなところでPython (re)でやってみました。所詮LLだし、結果には全然期待していません。 ところがところが、何故かこれが滅茶苦茶速い。 特に最適化したコードの書き方でもないんですが、1.6秒くらいで終わる。殆どC同等の速さ

  • #if 0ハックすごくね?すげーってw - Seasons.NET

    #If 0ってC,C++では、#endifまで問答無用でコメントにしますが、 これを使ったハックがすごく便利。 元ネタ http://gpwiki.org/index.php/SDL:Tutorial:Using_SDL_net #if 0 #!/bin/sh gcc -o a a.c exit #endif int main( void ) { printf( "Hello\n"); return 1; } これを保存して、実行属性をつけてから(chmod 755とか) ターミナルで、 # ./a.c と打ち込むと、 aという実行ファイルが生成される。 んで、./aと打ち込むと Helloと表示される。 今までは、Makefileか直接、gcc -o a a.cとかやっていた作業が、 ソースコード+Makefileの代わりになるわけ。 なぜこんな事ができるかってーと、 shのシェルスクリ

    #if 0ハックすごくね?すげーってw - Seasons.NET
  • アルゴリズムの小技

    与えられた整数のうち、立っているビット数を数えろ、と言われたらどうします? 一番最初に思いつくのは、ビットシフトしていって0になるまで数えるという、素直なやり方でしょう。 例えばこんな感じ。 int bitcount(unsigned long n) { for (int c = 0; n; n >>= 1) { if (n & 1) { ++c; } } return c; } 間違ってはいないけど、なんとなく遅そう。 テーブルを使えばもっと速い。 int bitcount(unsigned long n) { const static unsigned char aa[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; for (int c = 0; n; n >>= 4) { c += aa[n & 0xf]; } retu

  • ビットを数える・探すアルゴリズム

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

    agw
    agw 2009/04/15
    大変良質な解説がなされている。
  • 64ビットになると何が変わる?――64ビットプログラミングのデータモデル

    64ビットになると何が変わる?――64ビットプログラミングのデータモデル:64ビットコンピューティング最前線(1/2 ページ) システムが64ビットになるとプログラム的には何が変わるのか。3つの基的な64ビットプログラミングデータモデルを取り上げながら、理解を深めていこう。 C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビットプログラミングで何が変わる? システムが64ビットになるとプログラム的には何が変わるのでしょうか。 まず、大きな変更点として、ポインタの幅(サイズ)が64ビットになります。このことで、より幅広いアドレスをカバーできるようになります。そもそも、ポインタのサイズが32ビットのままなら64ビットに拡張される意味がありませんし、これは当然といえば当然のことかもしれません。 通常、ポインタはポインタとしてしか使用されることはあり

    64ビットになると何が変わる?――64ビットプログラミングのデータモデル
  • 64ビットへの移行で懸念される問題――基礎編

    64ビットへの移行は、ビット数を増やすことによって得られるとても大きな恩恵があるが、問題が無いわけでもない。具体的な問題について触れる前に、問題の質はどこなのかを短時間で理解しよう。 C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 32ビットから64ビットへの移行 32ビットから64ビットへの移行は、16ビットから32ビットへのそれに比べて、それほど大きな変化はありません。 その昔、16ビットから32ビットに移行した際、メモリをセグメントに分けることによって問題を解決していた時期もありましたが、この方法ではプログラムが煩雑になってしまい、パフォーマンス面でも不利な状況となってしまうことがよくありました。この反省から、32ビットから64ビットへの移行は、単純にアドレス空間を64ビットの幅にすることで解決しようという考えが、シンプルかつもっとも現実的

    64ビットへの移行で懸念される問題――基礎編
  • 64ビットプログラミングのポイント

    従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介しよう。(特集:64ビットコンピューティング最前線) C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラ

    64ビットプログラミングのポイント
  • C言語が意志もちストライキ─石田晴久氏急逝を悼む? - bogusnews

    10日早朝からプログラミング言語「C」で作成したプログラムが動かなくなるというトラブルが、国内各地のUNIXマシン上で発生していることがわかった。まったくバグのないソースコードでもウンともスンとも言わないとのことで、全国のIT土方は対策に追われている。前日に“日のC言語の父”と慕われてきた石田晴久氏が急逝したこととの関連性が指摘されており、 「意志をもったCが石田さんの死を悼みストを起こしたのではないか」 との分析もある。 都内のブラックIT企業に勤めるプログラマのAさん(23)も、異常事態に遭遇したひとり。10日朝、開発用のUNIXマシンにログインし、いつもどおり test.c として #include <stdio.h> int main(void){ printf(“Hello, world!\n”); return; } とCのプログラムを作成。コンパイルで生成されたファイル t

    C言語が意志もちストライキ─石田晴久氏急逝を悼む? - bogusnews
  • C++からSQLite3を使ってみる。 - seraphyの日記

    Python2.5でSQLite3を使って以来、C++でも試したいと思っていた。 Windows用のSQLite3のDLLは、msvcrt.dllのみに依存する、という手軽なものであり、DLL自体のサイズも400KB足らずと軽量である。 これを実際にプログラムに組み込んで使ってみた。 必要なもの SQLiteのページから、以下の2つをダウンロードする。 sqlitedll-3_3_8.zip sqlite-source-3_3_8.zip (sqlite3.h が必要なため) DLLは当然として、この中にはsqlite3.dllと、そのDEFファイルのみが置かれている。 ヘッダファイル等がないので、ソースを取得する必要がある。 実際に使うヘッダは、sqlite3.hだけである。 準備 DLLはあるがlibファイルがないので、 lib /def:sqlite3.def /machine:x8

    C++からSQLite3を使ってみる。 - seraphyの日記
  • GCC, the GNU Compiler Collection

    GCC, the GNU Compiler Collection The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,...). GCC was originally written as the compiler for the GNU operating system. The GNU system was developed to be 100% free software, free in the sense that it respects the user's freedom. We strive to provide regular

  • 大吉とDaiki_tiの大基地: C with lambda(仮)

    2009年1月25日 C with lambda(仮) C言語にlambda機能を追加したような言語です。 今のところは制限付き(変数などが独立している)lambdaだけなのですが(汗 今後はこの制限をなくしたり、マクロや継続を実装したいと思ってます download サンプルコード #include int main(void) {   printf("%d",{(int:int n)return n * n}(41));   //41の41倍が表示されます。 } ・{(戻り値:引数)処理}で新たに作成した関数を返します。 ・ブロック内の最後の文は;を書かなくても大丈夫です。 ・C言語と上位互換性があります。 ・コンパイル方法などはreadme参照。 #あと一週間で私立入試があるのにこんなことしてて大丈夫なのか、俺?orz --- 追記 サンプルコード修正 なんか演算子を勘違いして覚えて

  • やっぱりポインタのポインタは難しいようです — ありえるえりあ

    アリエルでは、プログラマとして応募してきた人に出すための設問を用意しています。現在、C版とJava版があります。 C版の作成は古くて、正直、もう廃棄してもいいかなと思わないのでもないですが、Javaは未経験でC/C++の経験はあります、という人はいますし、そういう人はいわゆるなんちゃってJavaプログラマよりは相対的に能力が高い傾向にあるのでC版も残しています。 最近、立て続けに、他は完璧な回答なのにポインタのポインタが絡む設問だけは間違い、という回答を受け取りました。結果引数(引数で値を返す関数。Cでは必要悪)で、返す値がポインタ値なので、引数の型をポインタのポインタにする必要がある設問です。他の設問で、ポインタを理解しているように見えました。しかし、ポインタのポインタが分からないということは、ポインタをきちんと分かっていないと判断せざるをえません。 昔なら一発でダメ出ししていたのですが

  • プログラミングに興味を持った10代にアドバイスするなら? | スラド デベロッパー

    ストーリー by hylom 2008年07月24日 13時20分 中古のFM-7一式を1000円で買ったのが始まりでした 部門より 家Ask Slashdotに「How To Encourage a Young Teen To Learn Programming?」という質問が寄せられている。 家タレコミ人の10代の息子がコンピュータ、とりわけプログラミングに興味を持ち始めたそうだが、自分は教えるのが上手くないため、彼の興味を後押しし、学ぶのを手助けするよい方法はないだろうか? とアドバイスを求める相談である。いまのところshellやファイルシステムの基礎を教えたり、Cで”Hello World”プログラムを教えたりしたが、このようなアプローチでよいのかちょっと心配だそうである。 家タレコミ人は、息子にコンピュータの素晴らしい世界を探検し、プログラミングを学んでもらいたい(しかも、

  • Linus「C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる」

    /15 [4] (21:54) 原文: http://lwn.net/Articles/249460/ From: xxx To: xxx Subject: Re: [RFC] builin-mailinfo.c をマシな文字列ライブラリを使うようにすること Date: Thu, 6 Sep 2007 18:50:28 +0100 (BST) Message-ID: <alpine.LFD.0.999.0709061839510.5626@evo.linux-foundation.org> On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > Git のソースコードを最初に見たとき、ヘンだと思ったこと: > 1. C++ じゃなくてただの C を使ってる。理由は謎。移植性がどうとか言わないで、 > そんなのウソに決まってるから。 *あんた* のほうこそ

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • プログラマーが単一言語にこだわるべきではないN個の理由 : 404 Blog Not Found

    2006年11月29日01:30 カテゴリLightweight Languages プログラマーが単一言語にこだわるべきではないN個の理由 Where N = the number of programming languages ever existed. 確かに今なら「階段を登る」-- ではなく、「階段を下りる」というアプローチの方がよさそうな気がする。 {informa,computa,evolu}tion: プログラマがC言語にこだわるべきでない0番目の理由 新しいプログラミング言語を作りたいと思ったら、そのプロトタイプはCのような低級言語ではなく、高級言語で実装したほうがいいのではないでしょうか。 問題は、高級言語側で「階段を下りる」方にはあまり労力が割かれていないこと。 それでなぜそうなのか、といえば、結局のところ「Cで間に合っています」という答が返ってくることが多いのではな

    プログラマーが単一言語にこだわるべきではないN個の理由 : 404 Blog Not Found