タグ

cに関するneumannのブックマーク (66)

  • FrontPage - PukiWiki

    2008/01/11からのアクセス回数 617047 竹 浩のページ † このページは、竹 浩(たまねぎおじさん)のWikiページです。twitter: @takepwave 、e-mail: take.pwave@gmail.com 以前のホームページでは、SmartDocで記述して公開していましたが、Wikiを使って 随時追加、更新することにしました。 ↑ 雑誌掲載記事の原稿 † 雑誌に掲載された記事の原稿のリンクを以下に示します。(投稿原稿なので、掲載内容と異なる部分があります、あらかじめご了承下さい)。 WEB DB Press Vol.29 既存機能との融合を既存技術で考えよう(Springの紹介記事) 組み込みプレス VOl.14 ICタグを使った書籍管理システムの構築 Software Design 2009/10 再考シェルスクリプト Software Design 2

    neumann
    neumann 2008/06/05
    yacc bison lex flex
  • プログラマの友 第十ニ報:bison を使ってみる

    何年か前に単純な興味からコンパイラ(A.V.エイホ、R.セシィ、J.D.ウルマン著、原田賢一訳。麻宮騎亜の漫画の方ではない)というを読んだことがあるのですが、途中から yacc, lex といった解析プログラム作成プログラムの話になって「プログラム持っとらんけん実践できんやないの」とやるせなくなったことがあります。 で、Cygwin に yacc, lex の上位バージョンである bison, flex が入ってることが分かったので、その bison を使ってみることにしました。折角タダで用意してくれているので、info bison を読んでやってみることにしました。 今回のプログラマの友はその覚書のようなものです。bison を使おうと思ってるけど尻込みしている人の参考資料にでもなれば幸いです。 (註:用語には無頓着なので不正確なことがあります) bison とは? 構文解析の基知識

    neumann
    neumann 2008/06/05
    yacc bison lex flex
  • Cコンパイラ設計(yacc・lexの応用)

    近年、Linuxやcygwinの普及によってだれでもyacc/lexを使って新しい言語を作成し、その処理系を作成することができるようになってきた。 G・フリードマンの「Cコンパイラ設計」は、yacc/lexの使い方を丁寧に説明した名著であるが、英語の原も日も絶版で、amazonのオークションでも買えないため日語訳を借り、OCRから復刻することにした。 Linux、cygwinではbison, flexが使われているので若干書と内容が異なる部分があるが、それも別枠で整理してみたいと考えている。 4章以降は、竹 浩のページ(Wiki)に追加中2008/05/15 コンピュータの発達とともに、これまでにCOBOL,FORTRAN、Pasca1,Lisp、C等、数多くのコンピュータ言語が作られてきました。一般には,新たなコンピュータ言語、あるいはそのコンパイラを作るなどということは

    neumann
    neumann 2008/06/05
    yacc bison lex flex
  • コーディング規約メモ

    Cコーディング・スタイル例 以前(2~4年前)に、社内向けにコーディング規約案を書いたことが あり、その残骸?があったのでコーディングスタイルの例として 出しておきます。 規約といってもラフなものですし、その当時の自分の スタイル/自衛手段を書き出し、これを叩き台にして他の人の要望 などを反映させたりしました。以下は、 社内事情や自分のスタイルに合わない個所をいくつか 削除しています(自分の習慣でない記述も残っていますが)。 単なる一般的な自衛手段だったり 完全に自分の好みのこともありますが、 一応、なぜ、そのようにするのか、を、書くようにしていたので、 何かの参考になるかもしれません。 あと、スタイルに関しては 『プログラミング作法』(書籍ですが)を みるのがいいでしょう。オンラインでは こちらなんか も結構いいです。 ■はじめに ■ ソース・ファイル ■ソース中の特殊文字コード ■動作

    neumann
    neumann 2008/04/21
    コーディングルール
  • C 言語のコーディング規約

    プログラムの設計 ファイルの分類 名前のつけ方 関数の作り方 システムライブラリの使用について 入出力 エラー処理 make その他 プログラムの設計 プログラムは、拡張性をもつように設計すること。 システムコールからの戻り値は、必ずチェックすること。 (malloc,fprintf,fopen) 一時ファイルを使うときは、TMPDIR が定義されているか調べ、 あれば、それを使う。 すべてのプログラムは、-v(version) と -h(help) をサポートしなければならない。 ファイルの分類 XXX.h は構造体の定義、記号定数名の定義、マクロの定義、 グローバル変数の定義、関数の定義、 システムのヘッダファイルの include など定義部を入れます。 複数の XXX.c が使うものをここで定義します。 また多重に include されてもいいように、先頭と

    neumann
    neumann 2008/04/21
    コーディングルール
  • C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan

    ポインタとは ポインタはC/C++言語の特徴的な機能のひとつである。ポインタ(pointer)を直訳すると「指し示すもの」であり、別の変数や文字列定数の場所を指し示すために使う。また、ポインタを指すポインタ(ポインタへのポインタ)というものも存在する。 このページをお読みいただいている読者にあっては、「C言語 ポインタ」「C++ ポインタ」などのキーワードでWeb検索をしたことがあるかもしれない。そうするとポインタに特化した内容の書籍をいくつか見つけられる。それだけ奥が深い機能ということである。 ポインタの用途 では、ポインタはどんなところで使われているのだろう。C/C++言語では、あらかじめ定義されている関数が多数存在するが、その一覧には、*(アスタリスクあるいはアステリスク)が付いているものをよく見かける。 これらはポインタを表し、主に文字列の操作やファイルをはじめとするデータの入出力

    C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan
    neumann
    neumann 2008/04/17
    ネタ
  • プログラミング言語 C の新機能(可変長マクロ)

    2. C プリプロセッサ 章では、プリプロセッサに新たに加わったいくつかの機能と、プリプロセッサに対する変更点について説明します。 2.1 新しいコメント表記方法 今までのプログラミング言語 C でのコメントの表記法は、/* */ という表記を用いていました。次の例では、青色の部分が示している部分、つまり /* で始まり */ で終わる部分がコメントとして扱われました。 /* * 引数一覧表示プログラム (c)1999 seclan * ver1.00 1999/03/15 最初のバージョン */ #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++){ printf("%d: %s\n", i,    /* 添え字。今何番目を 表示しているか */ argv[i] /*

    neumann
    neumann 2008/04/16
  • 分割コンパイルとリンケージ

    | 分割コンパイルと翻訳単位 | extern記憶クラス指定子 | リンケージ | オブジェクトモジュールとライブラリ | 演習問題 | [付録]nmコマンド | 分割コンパイルと翻訳単位 だんだん複雑なプログラムを開発するようになると ソーステキストが長くなり,一つのソースファイルで作成していると 全体を見通すのが難しくなってきます. またほんの一部だけを修正をしたときにも 全体をコンパイルし直さなければならないので, コンパイルに時間がかかるようになります. よって,プログラムをいくつかの部分に分けて 別々に開発したいという要求が自然に起こってきます. このような考えからプログラミング言語には 一つのプログラムを複数に分割できる機能が提供されることが多く, そのような各部分のことを一般にはモジュールと呼びます. C言語ではモジュールは翻訳単位と呼ばれ, おおまかには一つのソースファイル

  • WisdomSoft

    WisdomSoft(旧) このサイトはすでに運用を停止しています。 新しいコンテンツはこちらをご覧ください ■Products■ 書籍 ソフトウェア 読C 読Java Javaアプリケーション作成講座 Windowsゲームプログラミング ゲームエンジン プログラミング C#ゲームプログラミング Cisqua Developers Network プログラミング システムとAPI C言語入門 C++入門 C#入門 D言語入門 Java言語入門 Objective-C入門 Lisp入門 Perl入門 PHP入門 アセンブリ言語入門 Win32 API入門 標準 Windows API コモンコントロール マルチメディア API Windows ソケット JavaAPI入門 AWT入門 Swing入門 ネットワーク入門 Microsoft .NET入門 DirectX入門 OpenGL入門

  • C言語の単体テスト、いろいろ - ソフトウェアテストの勉強室

    ある意味、餃子ブームだ。 == メールサーバってCだから、C向けのテスト手法はいろいろと調べたりすることが多いし、自分でツールを作ったりします。せっかく調べたので、C言語をターゲットとした単体テスト/ユニットテストツールを枚挙してみる。 CUnit http://sourceforge.net/projects/cunit/によるユニットテストフレームワーク。出力に「__FILE__」「__LINE__」を記載して、分析しやすく結果を表現する。XML出力モード(Automatedモード)で実行し、DTDとXSLスタイルシートによって、統計情報が見やすくなる。 CUnit for Mr.Ando 安藤利和さんによる「言語技術者のC言語技術者によるC言語技術者のための C言語テスティングフレームワーク」。ソースはhttp://sourceforge.jp/projects/cunitforan

    C言語の単体テスト、いろいろ - ソフトウェアテストの勉強室
    neumann
    neumann 2008/04/03
  • C/C++ Technical Documents

    C++ 寄稿記事 επιστημη 氏から寄稿していただいた、開発者の方々にお役に立つテクニカルドキュメントです。Articles、References、Miscelaneousに分かれて説明しています。初心者の方からプロの方まで役に立つ読み物と資料集です。是非、開発のお役にお立て下さい。 Articles: 読み物 References: 資料集 Miscelaneous: 番外編

    neumann
    neumann 2008/02/16
  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
    neumann
    neumann 2007/12/12
    レースコンディション 競合状態
  • Insightの使い方

  • Cプログラミング診断室/普通の初心者/気になる個所

    その他にも、気になる個所はいっぱいあります。以上に述べたことほど重要ではありませんが、 でも、相当におかしい点です。プログラムの流れに沿って調べて行きましょう。 ■引数の書き方■ 66行を見てください。 関数call_melsecの第2引数はcccです。cccという名前のつけ方は実にいい加減ですね。 unsigned char ccc[200]; としていますが、文字列引数にサイズを直接書くのは相当「異常」と言えるでしょう。ふつうは、 unsigned char ccc[]; または unsigned char *ccc; と書くところでしょう。 ■signed と unsigned■ char型を使用するとき、必ず unsigned char として使っています。 char型は、signed になるか、unsigned になるかはコンパイラによって異なります。ただし、通 常の文字処理では

    neumann
    neumann 2007/10/26
  • ポインタ虎の巻

    ポインタ虎の巻 初級篇~ポインタはなぜ難しいか? C言語を学ぶ上で、ほとんどの人が引っかかり、往々にCの勉強を放棄するきっかけとなるのがポインタである。しかし、ポインタはC言語という特定のプログラム言語だけではなく、コンピュータというものを理解する上で、必要不可欠な重要な機能である。C言語参考書では、ポインタを解説する上で「箱」のモデルを使って解説することが多いが、この虎の巻では、より突っ込んだ具体的な動作を解説することでポインタというものの質を解明して見ようと思う。参考書ではC言語の抽象レベルの上で解説がされるのが通例だが、虎の巻では単純化されたアセンブリ命令を使って具体的に解説する。 初級篇目次 変数とは何か? 疑似アセンブリの定義 文字列の処理 アドレスの取得 ポインタの型 関数呼び出しの手法 構造体とポインタ リスト構造 NEW 二進木 NEW 中級篇~ポインタの高度な技 ポイン

    neumann
    neumann 2007/10/24
  • C言語: UNIX最速ファイルコピー

    Created: Kazuki Ohta, 2006/06/14 Last Update: Kazuki Ohta, 2006/06/14 「write(2)の正しい使い方」と同じく、OS演習でやった事の延長線の記事を書いてみる。お題は「UNIX上で大規模ファイルを最速でコピーする方法」だ。一般的に、UNIXでファイルをcopyする際には以下のような方法が有る。 read -> write read -> write with posix_fadvice mmap -> mmap -> memcpy -> fsync mmap -> mmap -> memcpy -> fsync with madvise mmap -> write mmap -> write with madvise read, write, mmap辺りは良いとして、posix_fadviseというシステムコールが有

  • C のファイルの中の勝手な位置にジャンプ

    3.1. ctags タグというのは、場所の情報を保持する類のものです。これは C 言語 を理解したりそのファイルを編集したりする場合に非常に役立つもの です。またある関数が呼ばれている場所からその定義場所にジャンプ したり、そこから戻ったりする場合にもとても役立ちます。 以下を例にとります。 今 foo() を編集中に関数 bar() まで行くとしましょう。さて、bar() が何をしているのかを知るにはタグを利用します。この関数の定義に ジャンプして、それから後で戻ってきます。必要なら bar() の中で 呼んでいる別の関数にジャンプして、戻ってくることもできます。 タグを使うには、最初にすべてのソースファイルで ctags プログラム を実行しなければなりません。このプログラムは tags というファイル を生成します。この tags というファイルにはすべての関数定義を 指している

    neumann
    neumann 2007/09/03
  • 初級C言語Q&A(3)

    初出: C MAGAZINE 1995年8月号 Updated: 1996-03-12 [←1つ前] [→1つ後] [↑質問一覧] [↑記事一覧] [ホームページ] ポインタ 前回は文字列を特集しましたが、文字列と密接に関係するのがポインタです。 初心者にとっては鬼門と呼ばれることもあるポインタですが、C言語を使いこなす には必要不可欠な概念でもあります。 経験的には、プログラムが思った通りに動作しない場合、ポインタの使い方を 間違っている確率は非常に高いようです。ポインタを十分理解することが、トラ ブルを少なくする近道の一つです。 Q 【ポインタ】 ポインタとは何か。 A それを詳しく説明すると他のQ&Aを書く頁がなくなってしまいます。:-) C言語に関する入門書の殆どが、ポインタとは何かというテーマで解説した章を 含んでいるはずなので、それらを読んでください。簡単なイメージとしては、実

    neumann
    neumann 2007/09/02
  • C++アプリケーションの効率的なテスト手法(CppUnit編) ― @IT

    第2回 C++アプリケーションの効率的なテスト手法(CppUnit編):連載 C++開発者のための単体テスト入門(1/4 ページ) 連載目次 前回は単体テストの重要性を示し、従来のC/C++でのテスト手法であるprintf関数やassertマクロを使ったテストを紹介しました。この2つのテスト手法は開発環境(コンパイラとライブラリ)さえあれば利用でき、その使い方も簡単です。しかしながら、いずれも系統立てて、効率よくテストを行うには力不足の感が否めません。 今回は、Visual C++ 2005 Express Editionを含むVisual Studio 2005(以後、VS 2005)で利用できる代表的な単体テスト・フレームワーク(Unit Test Framework)の1つである「CppUnit」を紹介します。 ■単体テスト・フレームワークとは? 前回、「バグは早期発見が望ましい。早

    C++アプリケーションの効率的なテスト手法(CppUnit編) ― @IT
    neumann
    neumann 2007/08/18
  • memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話

    Cのソースコードに m = 195; とか n = 0xffffffff; とか書いたときの定数(右辺)の型って、なんであるかご存じでしょうか? また、C90(1990年版のISO C言語規格)とC99(1999年版のそれ)ではその型が微妙に異なったりすることがあるんですが、ご存じでしょうか? さらには、お使いのマシンがILP32であるかLP64であるかLLP64であるかによっても、微妙に型が違ってきたりするんですが、それについてはどうでしょうか? えーもちろん、普段は「Uがついてなかったらint, Uがついてたらunsigned intジャネーノ?」くらいの理解でも殆ど不自由しないわけですが、詳細な理解がないとハマるケースも稀にあります。 私はというと、上に書いたような事は、C90/99の差違を除いてはだいたい理解しているつもりだったのですが、C90/99の差異について無頓着だったがため

    memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話