[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

Cに関するdaisukebeのブックマーク (33)

  • ふつうのコンパイラをつくろう 青木日記 2007-05-12

    daisukebe
    daisukebe 2008/05/23
    今日の飲みで話題になってたやつ
  • トランジスタ技術 8月号付録基板 連動企画(予告)

    9 2008 8 2008 ! !

    daisukebe
    daisukebe 2008/05/09
    USBプログラミング。熱い!と思ったら8月号・・
  • ホワット・ア・ワンダフル・ワールド C の構文の変態さ

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

    daisukebe
    daisukebe 2008/04/06
    勉強になる
  • Wataru's memo(2008-03-09)

    ● [Thoughts] プログラマの教養は manual pages に宿る (その5) 今回は、いよいよ GNU C コンパイラの登場です。一般書ではほとんど触れられることのない、インクルード処理の意義を再考してみましょう。 はじまりは hello.c 最初のソースファイルは、意図的に #include <stdio.h> を削除した hello1.c です。 int main() { printf("Hello, world!\n"); return 123; } main 関数の中に、printf 関数および return 文を記述しただけの小さなプログラムです。通常は return 文にゼロが添えられていますが、ステータスコードの意味を強調するために 123 を指定しています(UNIX の慣習としてプロセスは正常終了の時0、異常終了の時1を返す)。 main 関数の戻り値は、プロ

    daisukebe
    daisukebe 2008/03/09
    少しずつ、理解
  • Wataru's memo(2008-03-04)

    ● [Thoughts] プログラマの教養は manual pages に宿る (その3) 早速、Cソースからの実行可能ファイル作成に進みたいところですが、その前に作業環境を確認しておきましょう。 Linux/GNU 開発環境の確認方法 私が使用している Linux/GNU 開発環境は以下の通りです。 $ uname -a Linux debian64 2.6.22-3-amd64 #1 SMP Sun Nov 4 18:18:09 UTC 2007 x86_64 GNU/Linux オペレーティングシステム環境を簡単に知るためには、uname (Uts NAME: UTS = Universal Time-sharing System / Unix Time-sharing System) コマンドを使います。この Linux マシンは Core 2 プロセッサ搭載のため、Debian

    daisukebe
    daisukebe 2008/03/09
    Linuxプログラミングにおける各パッケージについて
  • プログラマの教養は manual pages に宿る (その2)

    ● [Thoughts] プログラマの教養は manual pages に宿る (その2) manual pages の構成や内容は、オペレーティングシステムによりかなり様相が異なりますが、その背景にある設計者の思想を理解するためには、Cソースファイル中で頻回に登場する「ヘッダーファイル」の意味を正確に把握しておく必要があります。 ヘッダーファイルを巡る諸問題 残念なことに、ヘッダーファイルの取り扱いは、動作環境や処理系によって影響を受けることもあり、従来のC言語入門書や UNIX システムプログラミング解説書で深く追求されることはありませんでした。 printf 関数を使用する時は、プログラムの先頭に #include <stdio.h> と書く。 C言語入門書中で必ず登場するこの一文ですが、その意味が語られることはまずありません。向学心旺盛な読者であれば、#include <stdio

    daisukebe
    daisukebe 2008/03/03
    追いかける
  • 高度プログラミング演習(九州大学全学共通教育科目)の説明資料

    実践プログラミング CとC++プログラミングに関するいくつかの例題と解説. 単なるプログラミングテクニックや文法の解説ではなく, 背後にある考え方の習得(アルゴリズム,データ構造,数学など)を重視して いる. プログラムをじっくり眺めそこから技法を学び取る. 最大値 [HTML] 曜日の計算 [HTML] 平均値,分散 [HTML] 2次方程式の解 [HTML] 最小自乗法 [PPT], [HTML] 待ち行列シミュレーション [PPT], [HTML] アーランの即時式モデル [PPT], [HTML] 行列のLU分解 [PPT], [HTML] ニュートン法による非線型方程式の解 [PPT], [HTML] 数値積分 [PPT], [HTML] 2分探索木 [PPT], [HTML] ヒープソート [PPT], [HTML] クイックソート [PPT], [HTML]

    daisukebe
    daisukebe 2008/02/28
    いい勉強になりそう
  • Manpage of GETADDRINFO

    Section: Linux Programmer's Manual (3) Updated: 2008-08-29 Index JM Home Page roff page 名前 getaddrinfo, freeaddrinfo, gai_strerror - ネットワークのアドレスとサービスを変換する 書式 #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); const char *gai_strerror(i

    daisukebe
    daisukebe 2008/02/16
    ホスト名からIPアドレスを得る。詳しい
  • 東大の演習問題に挑戦 - ボクノス

    東大のアルゴリズムとデータ構造演習(リンク切れ)が面白そうなので演習問題を解いてみる。 課題1-A:シェルを実装せよ。 ガンバリマス。 方針 パイプもリダイレクトも無し。一番簡単そうな実装を目指します。 1行取得は面倒なのでGNU getline使います。 fork,exec,waitを使って実装します。 execはexecvpを使うことにしました。 引数の処理は、単語の先頭ポインタをargvに追加して、スペースか改行があったら\0で踏み潰していきます。 コーディング #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <unistd.h> void prompt(void) { printf("* "); } int main(void) { /* 行の取得用 */ char *line = NULL;

    東大の演習問題に挑戦 - ボクノス
    daisukebe
    daisukebe 2008/01/30
    シェル実装
  • Assembly Programming Linux (system call)

    付録 B. システムコールの仕組み すでに説明した(4. Linux カーネルとシステムコール) ように Linux の システムコールはレジスタに引数を設定して int 0x80 によるソフトウェア 割り込みで呼び出します. ここでは linux-2.2.16 のソースから実際にシステムコール呼び出しの 仕組みを次の3つの部分にわけて解説します. 割込みによるシステムコールをカーネルが初期化する部分 システムコールが呼び出された場合に実行される部分 システムコールの実装 【注】 ソースリスト中で行頭の数字は行番号を示しています. カーネルのバージョンによって差がありますが目安にはなるでしょう. 1. 割込みによるシステムコールをカーネルが初期化する部分 最初にカーネルの起動部分で割り込みテーブルの設定をしています. /usr/src/linux/init/main.c: 1350 as

    daisukebe
    daisukebe 2008/01/19
    「 asmlinkage は 『引数が確実にスタックで渡されるように gcc に指示』しているだけでる」
  • Google のソフトウェアエンジニアとTシャツ

    一言で 「Google T シャツ」 と言っても、色々なバリエーションがあります。 Google Store で販売している T シャツだけでなく、イベントやプロジェクトの立ち上げ時など、色々なタイミングでオリジナルの 「Google T シャツ」 が作られます。少し前のことになりますが、社の屋上にソーラーパネルを張り巡らせたことを公表したときには、ソーラーパネルの描かれた記念 T シャツが社中庭で配布されていました。このような限定 「Google T シャツ」 はそのときにしか作られません。レアなのです。 東京オフィスでもそのような T シャツを作ることがたびたびあります。今回はそのうちの一つとして、エンジニアが作った T シャツをご紹介します。 これはエンジニアのオフサイト ( アウトドアイベントを通じて日エンジニア同士が交流するイベント ) 記念に作られたものです。でも、オフ

    Google のソフトウェアエンジニアとTシャツ
    daisukebe
    daisukebe 2007/12/18
    変態的
  • Rubyソースコード完全解説

    $Id: index.html,v 1.6 2004/07/20 23:08:12 aamine Exp $ この文書は書籍『Rubyソースコード完全解説』のHTML版です。 ただし初校段階の原稿をベースにしているため、 書籍では修正されている間違いが残っている場合があります。 予め御了承ください。 2004-02-16 に全章を公開しました。 目次 まえがき 序章 第 1 部「オブジェクト」 第 1 章「Ruby言語ミニマム」 第 2 章「オブジェクト」 第 3 章「名前と名前表」 第 4 章「クラス」 第 5 章「ガーベージコレクション」 第 6 章「変数と定数」 第 7 章「セキュリティ」 第 2 部「構文解析」 第 8 章「Ruby言語の詳細」 第 9 章「速習yacc」 第 10 章「パーサ」 第 11 章「状態付きスキャナ」 第 12 章「構文木の構築」 第 3 部「評価」 第

  • C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -

    2024年下半期のフィルム写真たち ふと気がつくと2024年も残り僅か。 そしてふと振り返るとこのブログに掲載する写真がGRIIIで撮ったものばかりになっていたのだけど、決してフィルムに飽きたということではなく、フィルムはフィルムで淡々と撮り続けているし、モノクロもカラーネガもいつも通り自宅で…

    C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -
    daisukebe
    daisukebe 2007/10/12
    うほっおもしれー
  • 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
  • Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー

    Linux カーネルのプロセススケジューラの核である kernel/sched.c の schedule() を読み進めていくと、タスク切り替え(実行コンテキスト切り替え)はその名も context_switch() という関数に集約されていることが分かります。2.6.20 の kernel/sched.c だと以下のコードです。 1839 static inline struct task_struct * 1840 context_switch(struct rq *rq, struct task_struct *prev, 1841 struct task_struct *next) 1842 { 1843 struct mm_struct *mm = next->mm; 1844 struct mm_struct *oldmm = prev->active_mm; 1845 184

    Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー
    daisukebe
    daisukebe 2007/09/25
    プロセススケジューラの実装に使用されているインラインアセンブラ。まだまだ知識が足りないな
  • Cプログラミング診断室 - 藤原博文

    はじめに 開院準備 昔むかし/ レベル差/ 教育/ ネットワーク/ 情報集め/ 隠すことについて/ プログラムコンテスト/ ドキュメント/ 楽するように/ 手抜きと下手の違い/ 開院 第1部 外来 第1章 普通の初心者 最初から充実した(!?)プログラムが登場 関数を短くし、コメントを改善する 上手になる秘訣/ プログラムの紹介/ 何だ、このプログラムは!!/ 短くするには/ コメントについて/ 無駄な努力をやめよう/ 名前/ 気になる個所/ 修正プログラム/ 課題/ まとめ 第2章 これでもプロ 売りものであるにもかかわらず、超きたない! 構造的な欠陥の指摘〜引数、ポインタの活用 プログラムの紹介/ 「超」基的問題点/ 関数分解/ 構造的欠陥/ 引数を使おう/ ポインタ/ その他/ まとめ(修正プログラム) 第3章 上司が問題 まさに驚異的なプログラムの見というべき 内容の修正から、

    daisukebe
    daisukebe 2007/09/22
    プログラミングスタイル
  • C言語の配列を理解する。 - ボクノス

    C言語の配列宣言が、バイナリレベルでは全く違う事がわかってきた。次は配列とポインタの違いを探るために、array[i]と*(array + i)の違いを探ってみる。 #include <stdio.h> #include <stdlib.h> #define SIZE 5 int main(void) { int i; int array[SIZE] = {0, 1, 2, 3, 4}; for (i = 0; i < SIZE; i++) printf("%d ", array[i]); puts(""); for (i = 0; i < SIZE; i++) printf("%d ", *(array + i)); puts(""); exit(EXIT_SUCCESS); } 出力されるテキストは変わらない。 gcc -gだけ付けてコンパイルして、objdump -dSで、print

    C言語の配列を理解する。 - ボクノス
    daisukebe
    daisukebe 2007/08/13
    バイナリレベルでのC配列
  • catで標準入力と連結 - ボクノス

    catコマンドはじゃなかった。catはファイルを連結出来る。そう、catはconcatenateの略なのだ!! と、今日改めて感じたのでメモ。 ふつうの使い方。 % cat hoge.txt ほげほげ % cat moge.txt もげもげスゲーふつう。 2つのファイルを連結する。 % cat hoge.txt moge.txt ほげほげ もげもげこれが来の使い方・・・ではなかった。 標準入力と連結する。 これこそ来の使い方。-で標準入力をファイルに指定する。 % echo hoge | cat hoge.txt - moge.txt ほげほげ hoge もげもげスゲー便利。簡易テンプレートエンジンに化ける。 結構使えるのが、ファイルの先頭にリダイレクトしたくなっちゃうとき。 % echo ほげほげ | cat - moge.txt > append.txtすげー便利。 応用範囲は広

    catで標準入力と連結 - ボクノス
    daisukebe
    daisukebe 2007/08/06
    catコマンド。ソース読んで勉強
  • ユメのチカラ: The C Programming Language

    プログラミング言語Cの教科書の定番と言えば、カーニハンとリッチーによるものが有名だ。K&Rと呼ばれていて、今だにそれを推薦する人もあとをたたない。 わたしの棚にも2nd editionがある。黄ばんだ表紙の奥付を見ると95/8/12とメモしてある。渡米してすぐリファレンスとして購入したものだ。 プログラミング言語の入門書で最初の例がなにがなんでもhello, worldというもの、K&Rからの悪しき慣習である。 プログラミングの初心者が、プログラムをどう書くかという事を習う教科書として使うにはいただけない。いただけない理由は多分いくつもあるかと思うのだけど、プロフェッショナルから見てもいただけない記述がいっぱいある。 例えば if (c >= '0' && c <= '9') ... とかいうイディオムとか、 c - '0' なんていうイディオムがいたるところ(?)にでてくるのであるが、

    daisukebe
    daisukebe 2007/08/01
    K&R本について
  • Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」:ITpro

    「Code Reading―オープンソースから学ぶソフトウェア開発技法」(毎日コミュニケーションズ発行,写真1)というがあります。私はこのの監訳者ですから,やや自画自賛になってしまいますが,ソースコードの読み方を主題にしたはほかにはあまりありません。技法からツール,データ構造,アーキテクチャ,さらには実際にコードを読んで利用する実例まで紹介している網羅的で良いだと思います。 このの「はじめに」で「達人プログラマー」として知られるDave Thomas氏は以下のように書いています。 他人の作品を読まなかった偉大な作家,他人の筆づかいを研究しなかった偉大な画家,同僚の肩越しに技を盗まなかった腕のよい外科医,副操縦席で実地の経験を積まなかった767機長――果たして,そんな人たちが当にいるのでしょうか? たしかにその通りです。ソフトウエア以外の領域では修行することとはすなわち,他の人の

    Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」:ITpro