タグ

Cに関するtanakaBoxのブックマーク (142)

  • C にクロージャのようなものを追加する Grand Central Dispatch - blog.8-p.info

    Snow Leopard には Grand Central Dispatch (以下 GCD) という機能がある。これは C と当然 C++, Objective-C, Objective-C++ にクロージャのようなものを追加し、マルチコアな CPU における計算の並列実行を簡単に書けるようにするらしい。 私は並列化には全然詳しくないのだけど、クロージャのようなものは気になるので調べてみた。 Block Apple Developer Connection にある Introducing Blocks and Grand Central Dispatch は GCD の全体像をコードを交えつつわかりやすく説明している。この “blocks” というのがクロージャのようなものだ。 Blocks are similar to — but far more powerful than — tr

    tanakaBox
    tanakaBox 2009/09/22
    どうなってんだ?
  • “本物のマクロ”で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

    tanakaBox
    tanakaBox 2009/09/13
    C In S-Expressionか。似たようなマクロを作った記憶がw
  • Cyclone: Non-existent page Cyclone%20for%20C%20Programmers

    tanakaBox
    tanakaBox 2009/09/07
    ナンダコレ。
  • 初級C言語Q&A

    [↑質問一覧] [ホームページ] 号別リスト コンパイラの選び方 (C MAGAZINE 1995-6) 文字列 (C MAGAZINE 1995-7) ポインタ (C MAGAZINE 1995-8) malloc, free (C MAGAZINE 1995-9) 値 (C MAGAZINE 1995-10) スタイル (C MAGAZINE 1995-11) 不定と未定義 (C MAGAZINE 1995-12) 前処理 (C MAGAZINE 1996-1) 処理系依存の問題 (C MAGAZINE 1996-2) 動かないプログラム (C MAGAZINE 1996-3) 構造体 (C MAGAZINE 1996-4) ビット操作、論理演算(C MAGAZINE 1996-5) 標準ライブラリ (C MAGAZINE 1996-6) 構造体(2) (C MAGAZINE 1996

    tanakaBox
    tanakaBox 2009/08/18
    初級なのか?
  • 数値演算法 (2) 多倍長整数の演算

    前回、コンピュータ上での数値計算処理方法について紹介しました。二進数を使った計算を考えた場合、全ての計算を論理演算から構築することが可能です。今回はこの考え方を応用して、多倍長整数の演算について紹介したいと思います。 1) 多倍長整数の表現 「位取り記数法」を使って、任意の数を基数として数を表現することができることを前回説明しました。通常利用されている「10進法」で25という数が記述されているとき、これを16進法で表すと19、2進法で表すと11001になります。 基数として利用できる数に制限はないので、もっと大きな数を基数に使うこともできます。例えば10進法で表された12345678という数を1000進法で表せば(12)(345)(678)と記述することができます。ここで()内の数は"一桁の数"を表していることになりますが、1000個もの記号を用意するわけにもいかないので、中身は10進法

    tanakaBox
    tanakaBox 2008/04/18
    階乗の高速化手法とか。
  • ホワット・ア・ワンダフル・ワールド C の構文の変態さ

    そもそも C に文字列型なんてありません.文字列みたいなアレは,文字の配列型です. ポインタと配列型は,全く違うものです.そもそも typeof (GCC 拡張) で取れる型が違う,sizeof で取れるオブジェクトサイズも違う. まぁ,文字列リテラルが存在していて,唯一複合型なのに静的 (static) 領域に初期化して置いとくことができたりして,いろいろややこしいのですが. あと,配列の要素アクセスは,常にポインタ演算経由で行われるのも,ややこしいところですね.配列とポインタを同一視してしまうというもっともありがちな混乱は,ここに由来するのだと思います.アセンブリ言語のレベルでは,配列なんていう高級な概念は存在しなくて,メモリと番地しかありません.ポインタは番地を入れる変数 (メモリやレジスタ) そんなこんなで,もともとアセンブリに由来する C は同じことを表現する方法が非常にたくさん

    tanakaBox
    tanakaBox 2008/04/07
    出力に自身が無いものもあるな。勉強になりまっす。
  • The GNU MP Bignum Library

    NEWS 2023-06-21: The GMP servers has been under serious load due to a barrage of clone requests from Microsoft/Github. Github's setup encourages "forks" of their projects, and such forks then by default pull in parent project changes. Around 2023-06-15, a project known as FFmpeg decided that it would be a great idea to clone GMP in their CI scripts, meaning that every one of their commits requeste

    tanakaBox
    tanakaBox 2008/04/03
    多倍長演算ライブラリ。素晴らしい。
  • 2004-10-02

    最近C++を使う時間が長いのでががーっと C++批判文章を書き上げてみる…。 (注:以下の文章において、C言語とはC/C++をさすものとお考えください) gotoは今から30年以上も前のダイクストラ先生による撲滅運動の 甲斐もあってかどうなのか、今日では良くないものの代名詞のように なっている。良くないということの主な理由はプログラムの流れが 見えにくくなる、等のようなのだが、実際のところどの程度のものかは よく分からない。C言語において、例えばループ構文を使わずにすべてを gotoでまかなおうとするとこれはほとんど自明に、確かに大変である。 例えばfor文なら、 for (A;B;C) body というものは、これを形式的に A _continue_for: if (B) goto _break_for; C goto _continue_for; _break_for:; このように変

    2004-10-02
    tanakaBox
    tanakaBox 2008/03/03
    「goto 変数」が使いたいよぉ。
  • Portable Coroutine Library Home Page

    Portable Coroutine Library (PCL) The Portable Coroutine Library (PCL) implements the low level functionality for coroutines. For a definition of the term coroutine see The Art of Computer Programming by Donald E. Knuth. Coroutines are a very simple cooperative multitasking environment where the switch from one task to another is done explicitly by a function call. Coroutines are a lot faster than

    tanakaBox
    tanakaBox 2008/02/14
    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
    tanakaBox
    tanakaBox 2008/01/18
    行列演算ライブラリの紹介
  • Super Technique 講座~マクロの技

    質的にC言語はトリッキーな言語ではない。だから、トリッキーな技は特定機能に集中する傾向があり、そのような機能とは「マクロ」と「ポインタ」である。 引数展開マクロの小技 DRY原理とプロトタイプ宣言 グローバル変数管理 関数ポインタ配列のプロトタイプ宣言と定義 引数展開マクロの小技 一般論としては、マクロは define 文によって即値定数を記号定数で定義しなおす、というのが真っ当な技であるが、これは今更触れるほどの内容はない。それでも次のようなテクニックはある。 #define swap(type,a,b) {type tmp=a;a=b;b=tmp;} int x = 10; int y = 20; swap( int, x, y ); これは引数展開マクロを使って、いわゆるSWAPを実現する簡単なマクロである。よく類書にこれは「次のように使うと問題がある」とされる。 if( z )

    tanakaBox
    tanakaBox 2007/12/30
    やばい。禁断の果実に・・・
  • C/C++ Reference

    Function objects − hash (C++11) Swap − Type operations (C++11) Integer comparison (C++20) pair − tuple (C++11) optional (C++17) expected (C++23) variant (C++17) − any (C++17) String conversions (C++17) Formatting (C++20) bitset − Bit manipulation (C++20) Debugging support (C++26)

    tanakaBox
    tanakaBox 2007/12/29
    C++ってスゲー便利そうだ。
  • Nettica VPN Service » Make Your Own Cloud

    Welcome to Nettica!Join the Cloud! We are a cloud based VPN service built on WireGuard™ technology providing fast, secure connections to local and cloud resources. Make your own cloud! Mix and match between local and multi-cloud environments managed with the Nettica Agent. Command and control your network from anywhere! OAuth2 and role-based access control provide a secure environment to manage yo

    Nettica VPN Service » Make Your Own Cloud
    tanakaBox
    tanakaBox 2007/12/28
    持ってないけど・・・ソフトウエア作法のサポートページ。ソースがお役だち。
  • c - strchr()って使えねえ : 404 Blog Not Found

    2007年12月23日03:00 カテゴリLightweight Languages c - strchr()って使えねえ ある文字が文字列で指定された文字種の中に含まれているかどうかという目的であれば、strchr()は使うべきではないでしょう。というか、strchr()はlibcに数多く埋まった地雷の一つのような気が。 strchr() ではまった話 - bkブログ 標準Cライブラリに strchr() という関数があります。文字列の先頭から指定した文字を探すという単純な関数なのですが、先日、意外な仕様を知りました。 strchr()は線形探索なので、文字種が増えれば増えるほど遅くなります。こういう場合は、素直にtable lookupを使うべきでしょう。 実際どれくらい差が出るのか調べてみました。念のために過剰最適化がなされていないことを、gperfで確認してあります。MacBook

    c - strchr()って使えねえ : 404 Blog Not Found
    tanakaBox
    tanakaBox 2007/12/26
    高林さんのstrchr()フリ>O(n)なので、文字列テーブルで解決O(1)>テーブルはえぇ。大量のテーブルが必要な場合、ビットテーブルも有効。>演算子位ならswitchいいんじゃねと思った。>switchだとビットテーブルと同程度の成績。
  • C言語における単体テスト テスタビリティを重視した関数設計 - ソフトウェアテストの勉強室

    今日は社外WGに参加。春の嵐だ! == 僕はC言語ばっかの開発をやってるので、ここでもC言語をベースにしていろんなことを書きます。あしからず。 リリース後の欠陥発覚は手戻り工数が最もかかるものだが、その多くは単体テストで発見可能なものが多い。某静的解析ツールのベンダー資料によるとその割合は40%近くになるらしい。定量的な資料は持っていないが、僕も単体テストの質がシステム全体やプロジェクト全体の質を大きく左右すると考えている。 そこでだ。僕の考える、上質な単体テスト for C言語はこんな感じ。 テストしやすいという、テスタビリティ まず、基的な関数の型はint型がいろいろ都合がいい気がする。エラー番号を復帰したり、errnoを復帰したり、直感的なものがよいと思う。例1のように、文字列格納先の先頭ポインタを引数渡しする場合は、呼び元で確保したサイズも合わせて引数渡しすること。(ちなみによく

    C言語における単体テスト テスタビリティを重視した関数設計 - ソフトウェアテストの勉強室
    tanakaBox
    tanakaBox 2007/12/26
    3行ツール活用によるテスト駆動開発。
  • 50行straceもどき - memologue

    すこし前に、straceコマンドもどきを50行くらいで書いてみたことがあるので、それを貼ってみまーす。いきなりコード。あ、C99です。 // strace_modoki.c: Linux/x86専用です。x86_64カーネルでは-m32でコンパイルしても動きません。 #include <stdio.h> #include <unistd.h> #include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include <asm/user.h> #include <asm/ptrace.h> int main() { int i; static const char* syscallstr[1000] = {0}; for(i = 0; i < 1000; ++i) syscallstr[i] = "???";

    50行straceもどき - memologue
    tanakaBox
    tanakaBox 2007/11/11
    straceの自作。
  • IBM gperf を使って効率的に C/C コマンド・ラインを処理する - Japan

    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 gperf を使って効率的に C/C コマンド・ラインを処理する - Japan
    tanakaBox
    tanakaBox 2007/10/17
    ハッシュ関数生成プログラム
  • Unicode の文字列をソースコードに埋め込む方法 - bkブログ

    Unicode の文字列をソースコードに埋め込む方法 Unicode の文字列をソースコードに埋め込む場合、直接 UTF-8 などで文字列を書く方法と、\uXXXX などのようにエスケープして表記する方法があります。後者の方法についてまとめてみました。 \uXXXX 形式の場合 Java, JavaScript, Python, C++, C (C99から) などの多くの言語では \uXXXX という表記 (universal character names) でUnicode の文字を文字列の中に埋め込めます。たとえば、「あいう」は "\u3042\u3044\u3046" となります。 \uXXXX で埋め込んだ文字がどのように解釈されるかは言語や処理系によって異なります。 gcc/g++ の場合、 -fexec-charset オプションで、実際に使う文字セット・エンコーディングを指

    tanakaBox
    tanakaBox 2007/10/17
    多バイト文字を受け付けないコンパイラ用に。
  • 3項演算子のgcc拡張 - Psychs's blog

    http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=gcc%A4%CE%B3%C8%C4%A5%B5%A1%C7%BD 今日、gcc 拡張で 3項演算子 x ? x : y の最初の返値を省略して x ?: y と書けることを知った。 つまり、ruby で v = x || y || z と書くところを、C でも v = x ?: y ?: z; こんな感じに書けるわけだ。これはいい。 この書き方だと、x や y が一度しか評価されないので、マクロを書くときに便利だと思う。 追記 (2007.9.28) gcc では、|| を使うと 0 か 1 になるので、?: に利用価値がある。 printf("%d", 2 || 4); // => 1 printf("%d", 2 ?: 4); // => 2

    3項演算子のgcc拡張 - Psychs's blog
    tanakaBox
    tanakaBox 2007/10/17
    おぉ。?:使えそう。
  • C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -

    週報 2024/04/28 川はただ流れている 4/20(土) 初期値依存性 さいきん土曜日は寝てばかり。平日で何か消耗しているらしい。やったことと言えば庭いじりと読書くらい。 ベランダの大改造をした。 サンドイッチ 一年前に引っ越してからこんな配置だったのだけど、さいきん鉢を増やしたら洗濯担当大臣の氏…

    C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -
    tanakaBox
    tanakaBox 2007/10/13
    うほ。変態杉っす。