タグ

Cとプログラミングに関するadvblogのブックマーク (35)

  • C系言語(C,C++,Objective-C,Java)で高階関数を使ってみる - WonderPlanet DEVELOPER BLOG

    はじめまして。エンジニアをしています、鷲見と申します。 今回は高階関数とラムダ式について書いてみようと思います。 高階関数とは 高階関数(こうかいかんすう,higher-order function)とは引数に関数を指定できたり、 戻り値として関数を返せる関数で、関数型言語などで使用されます※1。 高階関数を使用するメリットは、単純な関数を組み合わせることにより、 柔軟性の高いコードを書くことが出来るという点です。 高階関数の例として関数型言語Schemeのmap関数を見てみます。 map関数は、指定したリストのそれぞれの要素に対して同じ関数を適用する関数です。 例えばリストの要素を全て2乗したい場合は以下のように書くことができます。 ; xの2乗を返す関数を定義 (define (square x) (* x x)) ; リストの要素(1から5までの数値)を2乗する (map squar

    C系言語(C,C++,Objective-C,Java)で高階関数を使ってみる - WonderPlanet DEVELOPER BLOG
  • Perl の基礎知識

    Perl の解説は、いろいろあるので、ここでは、 C言語を知っている人が Perl を使うことに重点を当てて比較しながら説明します。UNIX ユーザー対象なので正規表現についても知っているものとして説明します。ううむ、するとあまり書くことないかなあ... はじめに Perl は、インタプリタ言語で、記述された Perl プログラム(スクリプト)を perl コマンドが実行していきます。プログラムの記述は、ファイルの先頭に #!/usr/bin/perl というように perl コマンドを指定する必要があります。この記述は、Shell スクリプトと同じです。

  • フリーソフトウェア徹底活用講座 - GCC - 岸哲夫 - Interfaceコラム目次

    ◆移り気な情報工学 第62回  地震をきっかけにリアルタイム・システム再考 第61回  海を渡って卵を産む北京の「海亀族」 第60回  超遠距離通信とソフトウェア無線 第59回  IT先進国フィンランドの計画性 第58回  物理的に正しいITの環境対応 第57回  年金,e-チケットに見るディジタル時代の情報原 第56回  「着るコンピュータ」から「進化した布地」へ 第55回  技術を楽しむネットの文化 第54回  情報爆発2.0 第53回  プログラミングの現場感覚 第52回  GPS+LBS(Location Based Service)がおもしろい 第51回  技術の格差社会 第50回  フィンランドに見る,高齢化社会を支える技術 第49回  たかが技術倫理,されど技術倫理 第48回  若者の理科離れ,2007年問題から「浮遊」せよ 第47回  機械のためのWWW――Google

  • MergeDoc Project

  • BohYoh.com - 柴田望洋後援会オフィシャルホームページ by 言語科学研究所

    13,500をこえるページから構成されるサイトは、コンピュータ・プログラミング・情報処理技術者試験対策・中国武術などに関する情報が満載です。また、多くのプログラムや約1,000ページ分のPDFファイルを閲覧・ダウンロードできます。ゆっくりとご覧ください。 What's New 2023/9/5(火) ■ 『新・明解Python入門 第2版』の「索引」のPDF全17ページを公開しました。 2023/8/30(水) ■ 『新・明解Python入門 第2版』のソースプログラムを公開しました。 2023/8/29(火) ■ 著書のコーナーに、新刊『新・明解Python入門 第2版』のページを開設しました。 2023/3/6(月) ■ 著書のコーナーに、新刊『新・明解C言語実践編 第2版』のページを開設しました。 2022/9/29(木) ■ 『新・明解C言語中級編 第2版』の「索引」のPDF全1

  • 100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog

    例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI

    100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog
  • 30年たっても基本はC言語

    筆者は日経ソフトウエアでプログラミングに関する記事の編集/執筆をしている。言語やプラットフォームを限定しない総合誌なので,面白そうな話題なら何でも取り上げたいと考えている。もっとも,なるべくやさしく書くことを旨としているので,安定したニーズがあるのはやはりプログラミング言語の入門記事である。中でもC,Javaの二つが両巨頭だ。 初心者が学ぶべき言語はどれかという問題には様々な意見があるだろうが,これら二つの言語を学びたいと考える人が多いことは実感できる。連載記事はコンスタントに人気があるし,特集のテーマとしてもそれぞれ単体で取り上げられるだけのニーズがある。 IT Proの読者に向けてもあまり宣伝臭くならないと思うので安心して書くが,この二つの言語の連載記事は,直近の号(2005年7月号)で新連載を開始した。筆者はCのほうの編集を担当している。連載開始に当たってはいろいろと頭の中でどのよう

    30年たっても基本はC言語
  • デバイスドライバ開発入門

    これは、私が仕事でたまたまやることになった、最初で(多分最後の?)Linux によるデバイス・ドライバ開発の経験から、学んだことを抜粋しています。これを読んだからといってすぐさまドライバが書けるようになるとは思わないでください。ただ、この手の文書はあまり見たことがなかったので、少しはインパクトあるかなあ、ぐらいの軽い気持ちで書きました。 実際のコードや関数仕様書などはお見せできませんが、雰囲気くらいは分かると思います。 カーネルのソースを読む際の参考になれば幸いです。 前提 SCSIについて 開発の必要条件 入門 デバイスドライバに関する一般的な考慮事項 UNIXでのアプリケーション開発に関する一般的な考慮事項 UNIXでのデバイスドライバ開発に関する一般的な考慮事項 ドライバとカーネルのインターフェース プロセス・スケジューリング関連サービス タイマー機能 メモリ操作関連 リソース関連

  • Cだけプログラマの憂鬱 - 神様なんて信じない僕らのために

    それ、C関係ないのでは - プログラミング言語を作る日記 それC関係ないよね、というのはきむら(K)さんや、id:minekoaさんにも言われたことですが、 実行時のチェックがない。よって、配列のオーバーラン、不正なキャスト、開放されたメモリを参照する、といった理由でのバグが発生し、原因追及が非常に困難。 GCがない。 それ、C関係ないのでは - プログラミング言語を作る日記 うーん、ここは少し観点が違うかなと思います。 C++でも、配列はオーバーランするし、Cスタイルキャストで苦しむし、 解放されたメモリを参照するなんてことは日常茶飯事に起こるわけで、 これらを解決する手段として、C++では、 可変長配列としてstd::vectorを利用する 固定長配列としてboost::arrayを利用する キャストはstatic_castだけを使う(reinterpret_castはCの構造体を読み

    Cだけプログラマの憂鬱 - 神様なんて信じない僕らのために
  • スタックオーバーフローのハンドリング (Stack Overflow Handling)

    作成日:2004.04.12 更新日:2006.02.19 更新記録 (2004.04.12) 3/6、 3/11、 3/13 の日記をまとめて作成。 (2004.05.07) 文章を修正。サンプルコードを追加。 (2005.01.20) alternative → alterante に修正。 (2005.02.13) 追記を記述。 (2006.02.17) linux_stack_info.cpp の実装に誤りがあったので修正。 (2006.02.19) BSD 系OS でのスタック領域情報の取得の仕方を追加 初めに C/C++ でプログラムをしているとつい忘れてしまうのがスレッドのスタックオーバーフローの問題。 最近の OS はスレッド当たり 2〜8MB のスタック領域を持っているため、よほどのことがない限りスタックが溢れてしまうことはない。 だが、再帰や alloca を積極的に使

  • ガベージコレクション

    Ruby には使われなくなったメモリを自動的に検出し解放してくれる ガベージコレクションの機能がある。 この節ではこのガベージコレクションの詳細を追ってゆく。 オブジェクトの管理 Ruby の GC は Ruby のオブジェクトのみが対象だ。かつ、Ruby が 生成し管理しているメモリにないといけない。逆に言うとユーザが勝手に 割りあてたメモリまでは面倒をみてくれないということだ。たとえば 以下の関数はメモリリークを起こす。 void koreha_dame() { malloc(1024); /* メモリをもらっては捨てる */ } 一方で以下の関数はメモリリークを起こさない。 void daijoubu() { rb_ary_new(); /* Ruby の配列を作っては捨てる */ } Ruby のオブジェクトはようするに struct RVALUE だったから、オブ ジェクトの管理

  • 自分の好きな言語の、やだなーと言うところ挙げてください

  • Cはワンマン向け - 神様なんて信じない僕らのために

    だと考えるようになった。 いや、あくまで自分の中ではです。 今、Cで作られたものを参考にしてC++に移す作業をしていたりするんだけれども、 至る所に出現する、 void* コールバック 謎フラグ hoge->foo->bar->ptr ううーん。 これだけをして、ダメというのは何かもしれないけれど、 void*は至る所で何かに化ける。 根底にあるのは汎用ワークだからして、 その場その場で姿が変わる。 メモリマッピングとしてはそれが当然だからして当然なのだが、 型安全性とは真逆。 コールバック、 StateやStrategy風なことをしようとしてコールバックの嵐になるんだけれども、 あっちやそっちやこっちに飛んだりして遷移が読みづらい。 何でもかんでもコールバックで指定すりゃ良いってもんでもない。 謎フラグ、 至るところにあるhoge_flag & HOGE_FOO_BAR、 フラグの名前だ

    Cはワンマン向け - 神様なんて信じない僕らのために
  • 漸くCを切り離したぞ! - 神様なんて信じない僕らのために

    ……ということで、漸くCを切り離しました。 1ヶ月かかった。 ちかれた。 そして今さらの反応。 どんだけゆとりですか(笑) 各ビットのネーミングとかはそりゃああるだろうけど、 その程度のビット演算で悩んでどうするのかと。 あとはまあ、マクロでくるむくらいはしていいとは思うけどさ。 404 Not Found うーん、ビット演算ではなくて、 そのビット演算の結果、どうなっているのかが読み取りづらいんですよねえ、と思った訳なのです。 「で、そのビットはどんな効果を及ぼすの?」という感じで。 いや、過去の自分が読んだら、こいつはゆとりだ! とか思うんでしょうけれども。 hoge_flag |= HOGE_FLAG; ... if (hoge_flag & HOGE_FLAG) { hoge_flag &= ~HOGE_FLAG; } が至るところに出現するんですが、これが立っているとどうなるの?

    漸くCを切り離したぞ! - 神様なんて信じない僕らのために
  • ホワット・ア・ワンダフル・ワールド libtcc を使えば C は高階関数型言語になる

    ふと,qsort の第四引数に直接 C のコード片を渡せたら面白いんじゃないか ? とか思って,TCC を使ってみたら簡単にできました. つまり,こういうこと qsort(... , compile("int lambda(int *x, int *y) {return(*x>*y)?1:(*xtcc-0.9.23.tar.gz とかを持ってきて,tar xvf して configure ; make して su して make install しておいてください.TCC には,普通の爆速 C コンパイラ tcc と,C 言語のコード片を機械語に変換するライブラリ libtcc.[h/a] が含まれています.libtcc の API については,libtcc で C のソースコードを eval などを. ソースは,一見長めに見えますが,これは単に,libtcc.h で API として公開さ

  • Cで実現する「ぷちオブジェクト指向」

    はじめに CodeZineではお初にお目にかかります、επιστημη(エピステーメー)です。最初のアーティクルはクラシックなCのお話。 昨今のアプリケーションはオブジェクト指向言語による実装が主流と言ってもいいでしょう。C++Java、VB.NETさらにはRubyPythonといったスクリプト言語まで、オブジェクト指向でない言語を探すのに苦労するくらいです。 記事では、今なお現役バリバリで活躍している手続き型言語の代表格(?)Cによる、オブジェクト指向のマネゴト(オブジェクト指向風味のCコーディングスタイル)を試みます。 対象読者 もっぱらCを主な開発言語として使ってはいるけども、オブジェクト指向に興味と憧れを抱いている方。 抽象データ型 手始めにオブジェクト指向の特徴の1つ、「抽象データ型(ADT:Abstract Data Type)」をCで実現してみます。抽象データ型とは、デ

    Cで実現する「ぷちオブジェクト指向」
  • メインページ - 謎のプログラミングHP

    C言語例題 Windows 環境における Cygwin/gcc (g++) でコンパイル・実行できることを目標にしたC言語の例題です. UXIX 環境での gcc で利用できるプログラムもありますが,GUI 等に関係するものは完全に Windows 依存のプログラムです. Windows 環境で利用できるプログラムでは,VFW (Video for Window) や MP3 から PCM 音源 (WAVE) への変換等の例題等もありますので,参考にしてみてください.

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • 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

    advblog
    advblog 2008/05/31
    わかりやすい。
  • C言語の関数の仮引数における配列型宣言の危険性について - yuyarinの日記

    #lowhacksでnyaxt, nishioが配列とポインタの違いについて議論していた。その中で関数の仮引数を配列として宣言した場合の挙動はどうなるのか、という話題にたどり着いた。結果僕は非常に危険だと思った。 しかし、まさかそんなことする人はいないだろうと、この記事を書きかけで放置していたのだが、C言語を学習中の友人が危惧していたコードを書く可能性があるミスをしてしまったので書こうと思う。初心者のためにソースは全文、コンパイルチェックをした上で掲載している。 sizeof演算子のおさらい sizeof演算子は演算対象が配列ならば、配列の要素数×要素のサイズが返ってきて、ポインタならばポインタのサイズ(32bit系では4)が返ってくる。 /* 1 */ #include <stdio.h> #include <string.h> int main(void) { char str[] =

    C言語の関数の仮引数における配列型宣言の危険性について - yuyarinの日記