タグ

programmingとCに関するgemini7のブックマーク (16)

  • 問.Cでオブジェクト指向プログラミングを行なえ - 株式会社CFlatの明後日スタイルのブログ

    問.Cでオブジェクト指向プログラミングを行なえ。ただし「オブジェクト指向プログラミング」とは、次のような特徴を持つプログラミング技法であるものとする: オブジェクトの実装はオブジェクトのユーザーからは隠蔽される(カプセル化/隠蔽) 同一型のオブジェクトと同一メソッドを与えた時、実際のメソッドの動作はオブジェクトの内容により変化する(ポリモーフィズム/多態性) なお、ユーザーが既存のオブジェクトをカスタマイズして新たなオブジェクトを作成する機能は、必要ないものとする。 この問いの狙い よく、「オブジェクト指向プログラミング」と「オブジェクト指向言語」は混同されます。が、前者はプログラムを設計する上での考え方で、後者はその考え方を容易にソースコードに書けるような仕様になっている言語の事で、全く違うものを指しています。 その証拠を示すため、「非オブジェクト指向言語」たるC言語で「オブジェクト指向

    問.Cでオブジェクト指向プログラミングを行なえ - 株式会社CFlatの明後日スタイルのブログ
  • ポインタの裏話

    ポインタの裏話 岡﨑 直観 okazaki at ecei.tohoku.ac.jp http://www.chokkan.org/ @chokkanorg ポインタの裏話 プログラミング演習A 1 このような説明を 覚えていますか? 知らなくても全く問題ありません ポインタの裏話 プログラミング演習A 2 int x = 0; &xは変数xの「アドレス」 「番地」「住所」を返す 変数x 0 &x メモリ空間, 記憶空間 変数xのアド レス(住所) ポインタの裏話 プログラミング演習A 3 ____ / \ 何言ってたんだこいつ? / ⌒ ⌒\ 番地 アドレス ぬるぽ / (●) (●) \ \ / | 、“ ゙)(__人__)" ) __________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | || / , \n||

  • Automakeでmakeする

    [ C++で開発 ] Automakeでmakeする GNU Automakeを使用すると、簡単な記述でMakefileを生成してくれます。類似ツールにimakeがありますが、imakeは事実上X Window Systemの一部となっており、Xアプリケーション用に調整されているので、非Xな環境やアプリケーション開発に使う際にはやや面倒です。 Automakeの超簡単原理 Automakeは、makeコマンドでビルドするための設定記述ファイルMakefileを、極めて簡単に記述するためのツールです。通常Makefileには、コンパイルする際の諸設定、リンクする際の諸設定、処理順序などを逐一記述しておかなくてはなりません。これは、よっぽどMakefileに慣れていないと苦痛ですし、慣れていても面倒な作業です。そこで、Makefileよりもずっと簡単な設定ファイルMakefile.amだけを記

  • Writing a C library, intro, conclusion and errata

    This is a series of blog-posts about best practices for writing C libraries. See below for each part and the topics covered. Table of contentsThe entire series about best practices for writing C libraries covered 15 topics and was written over five parts posted over the course of approximately one week. Feel free to hotlink directly to each topic but please keep in mind that the content (like any

  • 初心者への GNU perf のススメ

    Last modified: Mon Oct 29 15:01:59 JST 2018 初心者への GNU perf のススメ Lynx Optimized Pages! 51588 accesses since 2001/07/27. 5 accesses per day. [ TOP ] 目次: 初めての gperf (1) …簡単なプログラムを作ってみる 初めての gperf (2) 初めての gperf (3) …文字の重複問題を解決する gperf 実用編(1) …構造体にアクセスする gperf 実用編(2) …構造体の初期化 gperf が出力したソースコードの権利について 終わりに 初めての gperf (1) 一部から完全ハッシュ関数を作るツール gperf の使い方を知りたい、というリクエストが あったので、軽く説明してみようと思います。 (深く突っ込めないという話も。

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

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

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
  • C/C++ 迷信集 | 株式会社きじねこ

    C/C++ を使うプログラマは大勢います。しかし、その多くは OJT を通して言語を学んだのではないでしょうか? 実はそこに大きな落とし穴があります。 コンピュータや工学のことをよく知らない人たちは、時代の先端を歩むプログラマには「迷信」など無関係だと信じて疑わないかも知れません。しかし、迷信や誤解はどんな世界にも常に存在しています。 というわけで、ここでは C/C++ にまつわる迷信、誤解、よくある間違いを採り上げていきます。非常に後ろ向きな企画ですが、暇つぶし気分転換に読んでみてください。もしかすると、ご自身が迷信にとらわれていたことに気付くかもしれません。 追記(2009/03/15) このコーナーでは、C/C++ にまつわる迷信、誤解、よくある間違いを扱っています。決して「迷信」だけではないのですが、タイトルにはすべて[迷信]を付けています。 これは、主に検索エンジンでタイトルを見

  • The C Preprocessor

    C 言語のプリプロセッサはマクロプロセッサであり、C コンパイラが実際のコンパイルの前にプログラムの変換を行うさいに自動的に使用される。マクロプロセッサというのは、マクロを定義できることから来ている。マクロは、ある構文に対する短縮形である。 C プリプロセッサには 4 つの独立した機能があり、目的に応じた使い方ができる。 ヘッダファイルの取り込み。ヘッダファイルは、読者のプログラムの中に置き換え可能な宣言の入ったファイルである。 マクロ展開。マクロを定義することにより、それをC 言語のコードの任意の断片の短縮形とすることができる。C プリプロセッサは、そのマクロがプログラム中に現れたなら、定義と置き換える。 条件付きコンパイル。特別なプリプロセッサ制御子を使うと、色々な条件に合わせてプログラムの一部を取り込んだり、取り除くことができる。 行番号の制御。複数のソースファイルを組み合わせたり、

  • 2次キャッシュを意識してコーディングしてる?

    先日、北陸twitterオフで、2次元配列をx,yの順でアクセスするのと、y,xの順でアクセスするのでは、実行速度が違うんだよ、という話をしていたのだが、正直このネタは4、5年前にMIPSを使っていたときの事なので、今でも有効なのか?と思いベンチマークプログラムを作成して検証してみた。 内容 Integer型二次元配列の内容を処理する時に、アドレス順に行う(キャッシュにヒットしやすい)場合と、そうでない(キャッシュにヒットしにくい)場合を比較してみた。 環境 MacBookPro (Core2Duo 2.4G / Memory 4GB) MacOS X 10.5.6 gcc 4.0.1(-O2で最適化) 結果 X Y キャッシュヒット キャッシュミス diff 1024 1024 0.002351 sec 0.062166 sec x 26.44 1024 2048 0.004840 se

  • Mersenne Twister: A random number generator (since 1997/10)

    English Version News: MTToolBox をGitHubで公開しました。(2013/10/04) TinyMTをリリースしました。 (2011/06/20) MTGPをリリースしました。(2009/11/17) SIMD-oriented Fast Mersenne Twister (SFMT) をリリースしました。 SFMTはオリジナルのMersenne Twisterより約二倍速く、 よりよい均等分布特性を持ち、零超過初期状態からの回復も高速です。 SFMTのページを見てください。 (2007/1/31) お願い:使う時にemailを一通下されば、 今後の改良のはげみになります。 どんなささいな問題点でも、見つけ次第御連絡下さい。 m-mat @ math.sci.hiroshima-u.ac.jp (このメールアドレスは スペースを抜いて手で打ち直してください)

  • Unix Programming Frequently Asked Questions 日本語訳 - Table of Contents

    このFAQについて 1 プロセス制御 1.1 新しいプロセスの生成: fork() 1.1.1 fork()は何をするのですか? 1.1.2 fork()とvfork()の違いは何ですか? 1.1.3 forkによる子プロセスを終了するときにexitよりも_exitを使うのはなぜですか? 1.2 環境変数 1.2.1 どうすればプログラム内で環境変数の値を取得・設定できますか? 1.2.2 どうすれば全ての環境変数を調べられますか? 1.3 どうすれば一秒未満のsleepができますか? 1.4 粒度の細かいalarm()はどうすれば得られますか? 1.5 どうすれば親プロセスと子プロセスの間で通信できますか? 1.6 どうすればゾンビプロセスができることを防ぐことができますか? 1.6.1 ゾンビプロセスってなんですか? 1.6.2 どうすればゾンビプロセスになることを防げますか? 1.7

  • 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

  • チュートリアル — Cutterの使い方

    はじめに スタックを実現するプログラム(ライブラリ)をC言語で作成する。 プログラム作成はテストを作成しながら行う。テストの作成にはC 言語用のテスティングフレームワークであるCutterを用いる。 プログラムのビルドシステムにはGNUビルドシステム(GNU Autoconf/GNU Automake/GNU Libtool)を使用する。GNUビルドシス テムはビルド環境の差異を吸収する。これによりプログラム・テス トを複数の環境で容易にビルドできるようになる。 大きなコストをかけずにプログラム体が複数の環境で動作するの であれば、その方がよい。さらにテストもその環境で動作するのな らば、プログラム体がその環境で正しく動作することを容易に検 証できる。プログラム体だけではなく、テストも複数の環境で容 易に動作することは重要である。 Cutterが依存しているライブラリはGLibのみで

  • 子プロセスに LD_PRELOAD を継承させない - bkブログ

    子プロセスに LD_PRELOAD を継承させない Linux で LD_PRELOAD 環境変数を使うと共有オブジェクト (共有ライブラリ) のプリロードを行うことができます。通常、LD_PRELOAD が設定されている間は、あるプロセスから呼んだ子プロセスも同様にプリロードを行いますが、場合によっては子プロセスにはプリロードさせたくないときもあります。 たとえば、make に対して foo.so をプリロードさせるつもりで、 LD_PRELOAD=./foo.so make と実行すると、make が呼び出すあらゆるコマンドも foo.so をプリロードします。 その結果、gcc や gcc の呼び出すプログラム cc1, as, collect2, ld まで foo.so をプリロードします。 foo.so が make の挙動を変えることのみを目的としていた場合、 gcc まで影

  • GNU コンパイラ集(GCC) の使い方と移植について

    Node:Top, Next:G++ and GCC, Previous:(dir), Up:(dir) Introduction このマニュアルでは、GNU コンパイラの使い方、インストール方法、移植方法や、新しい機能や互換性の無い部分、それにバグレポートの方法などについて説明している。GNU CC のバージョン 2.95 に対応している。(日語版ドラフト-17 July 2001) G++ and GCC: C や C++ のプログラムがコンパイル可能Invoking GCC: gcc のコマンド行オプションInstallation: GCC のインストール方法C Extensions: C 言語の GNU の拡張C++ Extensions: C++ 言語の GNU の拡張Gcov: gcov: GCC のテストカバレージプログラムTrouble: GCC のインストールで問題が起

  • Programming UNIX Sockets in C - Frequently Asked Questions

    Created by Vic Metcalfe, Andrew Gierth and other contributers (Transrated into Japanese by: Keisuke Mori)May 21, 1998 この文書は、UNIX 上での ソケットインターフェースを用いた TCP/IP アプリケーションプログラミングについて、頻繁に行われる質問とその 解答を集めたものです。 1. 一般的な情報と概念 1.1 更新情報 1.2 この FAQ について 1.3 この FAQ はどのような人向けでしょうか? 1.4 ソケットって何ですか? 1.5 ソケットはどのように動作するのでしょうか? 1.6 [あるの題名] というのソースコードはどこから取得できますか? 1.7 どこでもっと情報を得ることができますか? 2. クライアントとサーバ(TCP/SOCK_STREA

  • 1