タグ

cとprogrammingに関するsatojkovicのブックマーク (13)

  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

  • strtok(区切り文字による文字列の切り分け) - ICPC突破専用ザク

    STLのstringで,str="100 200 400"のような文字をスペースで切り分けて,a=100,b=200,c=400...のようにしたいことがある. この場合,str.split(" "); のようにすれば適当に切り分けてvectorにでも出力してくれるんじゃないかと思っていたのだけど,調べたところsplitのようなものはどうも無いっぽく,代わりにCでstrtokという関数があるそうなのでこれを利用する. (stringから使う場合は(char*)str.c_str();する) strtokはstring.hの関数で,以下のような挙動をする. http://www9.plala.or.jp/sgwr-t/lib/strtok.html 【書式】 #include char *strtok(char *s1, const char *s2); 【説明】 分解対象文字列 s1 を、

    strtok(区切り文字による文字列の切り分け) - ICPC突破専用ザク
    satojkovic
    satojkovic 2010/03/04
    なるほど!
  • 並列アプリケーションを作ってみよう | OSDN Magazine

    インテルのCoreシリーズCPUが登場して以来、マルチコアCPUは爆発的に普及している。現在では比較的低価格なCPUでも複数のコアを搭載するようになり、現在販売されているPCのほとんどはマルチコアに対応しているといっても過言ではない。しかし、まだマルチコアCPUの性能を生かす、並列処理を行っているアプリケーションは多くない。 並列処理は、一般には実装が難しい、という印象があるようだ。確かにスレッドを駆使して処理を並列化する場合、スレッドの管理やスレッド毎の連携など、考慮しなければならないことが増え面倒ではある。しかし、プログラムを並列化するための言語規格「OpenMP」や、C++用の並列化ライブラリ「Threading Building Blocks」といった並列化支援技術を利用することで、プログラムの並列化へのハードルは大幅に低くなる。また、インテルの開発製品「Parallel Stud

    並列アプリケーションを作ってみよう | OSDN Magazine
    satojkovic
    satojkovic 2009/06/08
    並列処理アプリケーションの実装方法。マルチスレッド、OpenMP、TBB、自動並列化。
  • scanf - Wikipedia

    scanf(スキャンエフ)は、C言語の標準関数。ヘッダーファイル stdio.h で定義されている、書式付き入力関数である。 標準入力(大抵はキーボード)からの入力を、書式に従って変数に読み込む機能を持つ。標準出力関数のprintfと対比させて考えると分かりやすい。 ユーザーからの入力を受ける、ごく基的な機能を持つにもかかわらず、後述するように異常入力(エラー)に配慮すると相応の手間がかかるため、テストプログラムや入門書を除いてはあまり使われない。 このファミリーの関数には、入力ストリームを指定できる fscanf や、メモリ上の文字列ストリームを入力対象とする sscanf などがある。

    satojkovic
    satojkovic 2009/05/18
    scanfの問題点と回避方法を参照
  • C言語講座:ハッシュテーブル

    [リスト型のデータ構造]←このソース→[双方向リスト] /* ハッシュテーブル */ /* 今日はハッシュテーブルについて学びます。ハッシュ値とは、あるキーワードからある変換規則によって、得られる整数値のことです。 ポインタの配列を用意しておいて、キーワードへのポインタを、ハッシュ値を添字にして、配列に保存します。このポインタの配列のことをハッシュテーブルといいます。キーワードをハッシュテーブルに保存することにより、効率よく取り出すことができます。そのキーワードが既に登録済みかどうかは、キーワードからハッシュ値を割り出し、ハッシュテーブルを調べれば、瞬時にわかります。 二つ以上のキーワードのハッシュ値が、たまたま一致してしまうことがあります。これをハッシュの衝突といいます。衝突した場合の解決法は幾つかあります。今回は、リスト型のデータ構造にして、衝突した場合は先に登録されているキーワードの

  • OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん

    OMakeすごい。OMakeはマジですごい。 OMakeはGNU makeの代替品みたいなものなんだけど、正直なところこのツールの強力さはGNU makeと比べると失礼なくらいすごい。これのおかげで、「コード修正→ビルド→デバッグ→コード修正→・・・」のループの、ビルドにあたる作業がほぼ消え去った。 ファイルの依存関係の解析がとにかくすごい。よくあるユースケースなんかの場合、最小限の手間でほぼ完璧に依存関係を網羅して、よしなにビルドしてくれる。 とりあえず、はやみずが実際に使ってみたケースを例にとってそのすごさの一端を紹介しようと思う。 case study 論より証拠ということで、自分が OMake を試しにつかってみたケースを紹介する。C言語でスタティックライブラリを作っていて、それに加えて簡単なテストプログラムを書いている。 /include/ 以下にヘッダファイルが全部ある /sr

    OMake つかったらC言語でプログラム書く手間がバカみたいに減った - 日記を書く[・ _ゝ・]はやみずさん
  • Cでのポインタの読み方

    Cでのポインタの読み方 Cのポインタの読み方は、ルールを知らないと摩訶不思議です。 ルールを覚えれば、 int (*p[5])[3]; char (*(*fp)(void))(int); なんてのも解読する事ができます。 大事な前程 ポインタを読む際には、「英語で読む」必要があります。 「え~、英語~」 と思う方もいるかもしれませんが、逆に日語で読む方が大変です。 基ルール ルール 後置演算子が優先。 関数の() 配列の[] 前置はあとで。 要は、「後ろに何かあったら、後ろが優先」です。 演算子の英語での読み方 * pointer to ... () function returning ... [] array of ... Lesson 1 まず、演算子が単独で出てくる場合です。 Lesson 1-1 pointer to ... int *p; これは、まずpを見ましょう。 i

  • 「Cクックブック」 - 書評 - Unix/Linuxプログラミング 理論と実践 : 404 Blog Not Found

    2008年05月09日22:00 カテゴリ書評/画評/品評Lightweight Languages 「Cクックブック」 - 書評 - Unix/Linuxプログラミング 理論と実践 アスキー改めアスキーメディアワークスの鈴木様より献御礼。 Unix/Linuxプログラミング 理論と実践 Bruce Molay / 長尾高弘訳 C言語を通してUnix/Linuxの仕組みを学べる良著。Perl/Python/Rubyクックブックのレシピを、レシピを並べる(遅延学習的)のではなく、レシピの難易度順に並べ直して、実践を通して理論を学ぶことが出来るように仕立ててある。 書「Unix/Linuxプログラミング理論と実践」では、以下の目次のとおり、実際のUnixコマンドを「再発明」することで仕組みを学んでいく。 目次 - Unix/Linuxプログラミング 理論と実践にないのでBooksデータベー

    「Cクックブック」 - 書評 - Unix/Linuxプログラミング 理論と実践 : 404 Blog Not Found
  • WTL 講座 第9回 メモリリーク対策

    第9回は、 ちょっと予定を変更してメモリリークのつぶし方とかをやります。 今回のポイント メモリリークを発見する方法とそのつぶし方

  • プログラミング/小ネタ集/Unicode対応コーディング - ルーチェ's Homepage

    概要 † このコンテンツは、C/C++言語でWindowsプログラミングをしていて、かつMFCやATLにある CString クラスを使っていない人くらいにしか実益はないかもしれません。 が、内容的に知っておいて損はないことなので書いておきます。 概要としては、 LPTSTR 型や TCHAR 型について知り、NT系(Unicode環境)と9x系(非Unicode環境)のどちらにも最適化できるソースコードを書こうというお話です。 TCHAR 型を見たことがなくても、 LPTSTR 型なら見たことがある人も結構いるでしょう。 初心〜中級のWindowsプログラマは、大抵は LPTSTR 型と LPSTR 型の違いを特に意識せずにコードを書いています。 しかし、この二つの型を混同するのは非常に危険なことです。 まずはこれらの型の定義を説明し、 TCHAR 型を用いることでUnicode対応プロ

  • http://mikata.curiocube.com/hello/index.php

    satojkovic
    satojkovic 2007/03/14
    メモリの話とか
  • http://homepage2.nifty.com/tenk/cgokai/scanf.htm

  • 関数側でmalloc()するときの注意

    関数を呼び出す側でポインタ変数を宣言し、そのポインタ変数を渡した関数の内部でmalloc()やrealloc()といった関数でメモリの確保や再確保を行う場合には、注意が必要です。 問題 というのは、malloc()やrealloc()の実行後、ポインタの値が変わってしまうということです。つまり、ポインタ変数の保持しているアドレスが変わるということです。これだけではなぜ重大な問題なのかわからないかもしれませんが、よく考えてみてください。関数内で宣言したポインタ変数のスコープは関数内だけであり、関数が終了すると破棄されてしまうのです。つまり、せっかく関数内で確保したメモリ領域も、その場所を示すべきポインタの値があてにならないので、アクセスできないということになります。これを示したのが次のプログラムです。 #include <stdio.h> #include <stdlib.h> void

    satojkovic
    satojkovic 2005/06/02
    関数でmallocをすると関数終了時にメモリが開放されるよ
  • 1