タグ

cに関するmaangieのブックマーク (30)

  • 侍エンジニア塾のC言語のサンプルがヤバすぎる。

    C言語はもうかれこれ10年くらい書いていないけど、流石にこれはヤバい。 正直な感想として、ブランド毀損するくらいの危険性をはらんでいると思う。 当該記事からコピーしてきた。 #include <stdio.h> #include <stdlib.h> // 構造体の宣言 typedef struct { int num; char *str; } strct; int main(void) { // 実体を生成 strct *entity; // 動的メモリの確保。確保したメモリをstrct型ポインタにキャスト。 entity = (strct*)malloc(sizeof(strct)); // メンバの初期化 entity->num = 0; entity->str = (char*)malloc(sizeof(32)); // メモリに文字列を代入 sprintf(entity->s

    侍エンジニア塾のC言語のサンプルがヤバすぎる。
    maangie
    maangie 2018/10/18
    sizeof は関数とかマクロじゃなくって、演算子だってコトを理解してないんじゃないかな。「コード憎んで、人を憎まず」
  • C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD

    ビジターの皆さんへ C言語に関心を寄せていただきありがとうございます。このページは、C言語の面白い問題、パズルのリストです。これまでに友人たちからeメールで送ってもらったり、で読んだり、インターネットで見つけたり、あるいは自分でC言語でコーディングしていて気づいたりしたプログラムを集めました。 多くのプログラムは、コンパイル、実行され、その振る舞いを示すものです。問題は大まかに次のカテゴリに分けられます。 一般的なタイポエラー。C言語プログラマが頻繁に犯すミスであり、かつ追跡が困難。 初見では非常に理解しがたい小さなプログラム。これらの問題は、他人が書いた優れたコードを読み解く良い訓練になります。 また、全てにGnu/Linux/gccを使っています。掲載順は、それぞれの難易度とは関係ありません。問題解決の助けが必要な場合は、気軽に私に問い合わせてください。連絡先は こちら です。また、

    C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD
  • わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ

    Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。 ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。 以下実際にLinuxでコンパイルしてみました。 自己コンパイルできる このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。 gcc cc500.c -o cc500_1 生成された実行ファイル「cc500_1」を使

    わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ
    maangie
    maangie 2014/11/18
  • C言語でプログラミングする際の覚書(Notes on Programming in C) - YAMAGUCHI::weblog

    はじめに こんにちは、Go界のシャールト・コプリーです。気がついたら最後のエントリから3ヶ月も経ってました。 Goを始めると「なんでこういう書き方になってるんだろう」とか、「そもそもなんでこういう仕様になってるんだろう」とか思うことがちらほらあると思います。これは大いにGoの作者の一人であるRob Pike氏の思想に依るところがあるのが見受けられます。彼のプログラムに対する考え方が25年前に公開され「Pike Style」として知られていますが、いまもその考え方は大きくは変わっていないと思われます。せっかくなので翻訳しました。文はC言語に関する文章ですがその質は言語に依らないものだと思います。 Notes on Programming in C (追記)25年前なのでコンパイラの動作に依存する部分(includeに関する記述)などは古い部分もありますが、プログラミングスタイルに関する部

    C言語でプログラミングする際の覚書(Notes on Programming in C) - YAMAGUCHI::weblog
    maangie
    maangie 2014/10/07
  • アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ

    子供のころからできるだけ手抜きして成果を挙げることだけは長けている山です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,

    アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ
    maangie
    maangie 2013/07/06
    「C/C++ でまじめに運用するのってここら辺ができないと辛い」。ブックマーク・コメントも。
  • 本の虫: 記録からみるLinus TorvalsのC++観

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > Gitのソースコードを始めてみた時、2つのことが頭にひっかかった。 > 1. C++じゃなくて純粋なC。理由は不明。移植性とか言わないでよ。 > クソだ。 クソまみれなのはオメーの方だ。 C++は悲惨な言語だ。しかも、少なからぬ数のプログラマーが使っていて、完全無欠のどうしようもないクソを生成するのがめちゃめちゃ簡単になっているという点で、よけいに悲惨だ。マジで、Cを選択する理由が「何もなかった」としてもだ、C++プログラマー避けになるというだけで、Cを使う大義名分になる。 つまりだ:Cの選択は唯一のまともな選択なんだよ。Miles Baderがふざけて、「いやがらせによる追い返し目的」なんていってたが、実際のところ正しい。俺の出した結論では、プロジェクトにCよりC++を使いたがるプログラマーは、む

    maangie
    maangie 2013/05/17
  • C言語は今でも価値のある言語か?

    Couchbaseの作者Damien Katz氏は,C言語はバックエンドプログラミングにおいて現在でも優れた言語である,という意見を持っている。しかし他の開発者は,C言語はあまりにも欠陥が多いとしてC++Javaを支持するもの,あるいはいずれも好まないというものなどさまざまだ。 CouchDB の開発者であるDamien Katz氏は,The Unreasonable Effectiveness of C と題した先日のブログ記事において,C言語がバックエンドのための優れた言語であると断言した。氏はC++Java,さらにはErlangやRubyのようなより現代的な言語よりも,今後もC言語を支持していくつもりだという。ただし単純に,C言語を他のどれよりも優れた言語だと言っている訳ではない。"言語自体のパフォーマンスと信頼性が重視される場面においては,C言語に比類する言語は皆無である",別

    C言語は今でも価値のある言語か?
    maangie
    maangie 2013/01/29
  • http://blog.livedoor.jp/tabetabe22/archives/1696240.html

    maangie
    maangie 2012/12/17
    ははは。
  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    maangie
    maangie 2012/12/04
    面白い。いつか使うかも…。
  • Amazon.co.jp: エキスパートCプログラミング: 知られざるCの深層 (アスキーブックス): ピーターヴァン・デ・リンデン (著), 系,梅原 (翻訳), van der Linden,Peter (原名): 本

    Amazon.co.jp: エキスパートCプログラミング: 知られざるCの深層 (アスキーブックス): ピーターヴァン・デ・リンデン (著), 系,梅原 (翻訳), van der Linden,Peter (原名): 本
  • バベル案内

    Steve Yegge / 青木靖 訳 2004年9月 これは駆け足の言語案内だ — Amazon Developers Journalのために今月書いていたのだが、どうもこれを見苦しくないようにする方法を見つけられなかった・・・。 ひとつには、私はどうも粗野で口汚くなりがちで、オフィシャルな趣のあるAmazonの出版物に載せるのは不適切に思えた。それでかわりに誰も読まない自分のブログに押し込めてしまうことにした。読んでるのはあなたくらいのものだよ。どうも! もうひとつ言うと、これは当に書きかけのものであり、そこかしこの断片を集めたものでしかない。全然磨き上げられていない。これもブログエントリにする理由になっている。ブログなら別に良質である必要も完全である必要もない。単に私が今日考えたことというだけのものだ。ではお楽しみを! この駆け足の案内では、C、C++、Lisp、JavaPerl

    maangie
    maangie 2012/06/28
    「特にLispの小さく純粋な方言であるSchemeを学ぶといい。GNU版のScheme実装はGuileと呼ばれている」
  • Big Sky :: mruby でWebサーバ動いた

    ここ数日、mrubyの拡張を書いてた訳ですが。 mattn/mruby-uv - GitHub interface to libuv for mruby(experimental) https://github.com/mattn/mruby-uv mattn/mruby-http - GitHub interface to http for mruby(experimental) https://github.com/mattn/mruby-http これを使って #include <mruby/proc.h> #include <mruby/data.h> #include <compile.h> #include <mrb_uv.h> #include <mrb_http.h> #define _(...) #__VA_ARGS__ "\n" int main() { int n;

    Big Sky :: mruby でWebサーバ動いた
  • 訃報: C 言語の開発者、デニス・リッチー氏が死去 | スラド デベロッパー

    Google+ で Rob Pike 氏が語ったところによると、C 言語の開発者、K&R の R であるところの Dennis Ritchie 博士が亡くなられた。70 歳 (Rob Pike 氏による Google+ への投稿) 。 長らく闘病中だったとのことで、先週末に自宅で息を引き取ったそうだ。

    maangie
    maangie 2011/10/14
  • プログラミング言語Cについて知ろう

    プログラミング言語の基となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部) プログラミング言語Cは開発の仕事に役立つ人気のあるプログラミング言語です。 この連載では、Cでのソフトウェア開発をこれから始めようという方や、使った経験はあるが勉強し直したいという方のために、基をきちんと押さえながら勉強できるような解説をしていきます。 なるべく正しい文法や作法を身に付けていただくためにJIS規格を基に解説しますが、それだけにこだわらず実際の開発で役に立つことを分かりやすくお伝えしていきます。 Cの成り立ちと規格 まずは、Cの成り立ちと規格について知っておきましょう。ちょっと堅苦しい感じがするかもしれませんが、歴史を知っているとなぜこういう書き方をするのか、こういった機能があるのかといったことが分かります。また、規格を知っているとプログラミングをしていて何か

    プログラミング言語Cについて知ろう
    maangie
    maangie 2010/01/13
    どーでもいいが、WindowsのカーネルもCじゃないかなあ。まさかアセンブリ…?
  • シフトJIS文字列の判定-C/C++-水無瀬の部屋

    文字列中のある1バイトについて、1バイト文字か2バイト文字の一部であるかを判定する。 #define jms1(c) \ (((0x81 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0x9F)) || ((0xE0 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xFC) )) #define jms2(c) \ ((0x7F != (unsigned char)(c)) && (0x40 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xFC)) //********************************************************* // 文字列 str の str[nPos]

    maangie
    maangie 2009/07/02
  • C言語が意志もちストライキ─石田晴久氏急逝を悼む? - bogusnews

    10日早朝からプログラミング言語「C」で作成したプログラムが動かなくなるというトラブルが、国内各地のUNIXマシン上で発生していることがわかった。まったくバグのないソースコードでもウンともスンとも言わないとのことで、全国のIT土方は対策に追われている。前日に“日のC言語の父”と慕われてきた石田晴久氏が急逝したこととの関連性が指摘されており、 「意志をもったCが石田さんの死を悼みストを起こしたのではないか」 との分析もある。 都内のブラックIT企業に勤めるプログラマのAさん(23)も、異常事態に遭遇したひとり。10日朝、開発用のUNIXマシンにログインし、いつもどおり test.c として #include <stdio.h> int main(void){ printf(“Hello, world!\n”); return; } とCのプログラムを作成。コンパイルで生成されたファイル t

    C言語が意志もちストライキ─石田晴久氏急逝を悼む? - bogusnews
    maangie
    maangie 2009/03/11
    gccでK&Rで書くとwarningが出るもんな……。ってANSI規格準拠版かよ。
  • float型とdouble型を比較した場合、常にfloatが速いと思ってはダメらしい - 強火で進め

    ※こちらに記載したプログラムには大ポカがあり、正しい検証プログラムになっていませんでした。こちらに修正エントリーを書きましたのでプログラムや速度比較についてはそちらを確認下さい。 以前、「Cプログラミング診断室」の作者の方がホームページを作れていることを知り、見ていたところ こちらのページに Cプログラミング診断室/キャストが好き/float型対double型 http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.4.4.html ほとんどのCでは、float型よりdouble型で計算した方が数倍高速になります。 との記述がありました。自分もどっぷりとdoubleよりfloatの方が速いとの印象に浸かっていたのでかなりおどろきました。 もちろん、常にdoubleが速いという訳では無くこちらのサイトでも なお、どっちが速いか、どのくらいの差

    float型とdouble型を比較した場合、常にfloatが速いと思ってはダメらしい - 強火で進め
    maangie
    maangie 2009/02/27
    関数呼び出しの際、floatは常にdoubleにキャストされるんじゃなかったっけ。floatはメモリ等のリソース節約目的以外で使うもんじゃないと思う。
  • C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -

    週報 2024/04/28 川はただ流れている 4/20(土) 初期値依存性 さいきん土曜日は寝てばかり。平日で何か消耗しているらしい。やったことと言えば庭いじりと読書くらい。 ベランダの大改造をした。 サンドイッチ 一年前に引っ越してからこんな配置だったのだけど、さいきん鉢を増やしたら洗濯担当大臣の氏…

    C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -
    maangie
    maangie 2008/10/10
    その2→id:entry:06145327
  • 【レポート】GCCに匹敵するコンパイラ?! LLVM - BSDCan2008 | エンタープライズ | マイコミジャーナル

    BSDCan2008、およびその直前に開催されたFreeBSD Developer Summitを通じて関係者がもっとも強い関心を持ったのは、もしかするとChris Lattner氏が担当したセッション「BSD licensed C++ compiler - LLVM and Clang: Next Generation Compiler Technology」だったかもしれない。同氏のセッションで初めてLLVM(Low Level Virtual Machine)について知ったという人も少なからずいたようだ。Lattner氏はLLVMのチーフアーキテクトであり、同技術を語るには適切な人物といえる。 モダンテクニックで開発されたマルチ言語コンパイラインフラ LLVMはモダンなテクニックで開発されたコンパイラインフラストラクチャだ。プログラミング言語に依存しないモダンなオプティマイザとコード

    maangie
    maangie 2008/06/03
  • 【ハウツー】今こそ再考察! C言語ポインタ徹底解説 (1) ポインタと1次元配列の関係 | エンタープライズ | マイコミジャーナル

    C言語は、ポインタが使える言語です。ポインタを使えば、メモリの直接的な操作など、より柔軟なプログラミングが可能です。一方、そのためにはポインタがどのようなメモリ領域を指し示しているか、またポインタ自体が有効なアドレスを保持しているかなどについて十分な理解が必要です。 稿では、C言語のポインタについて、配列との対比に焦点を当てて解説を行います。 *** C言語では、ポインタを配列のように扱うことができます。また、配列名はポインタに変換可能で、別のポインタに代入できます。 まずは1次元の場合について、ポインタと配列の関係を考えてみましょう。 宣言文の記述 いま、ポインタと配列を次のように宣言したとします。 char *p; ← char型へのポインタpを宣言 char a[5]; ← char型を要素とする、要素数5の配列aを宣言 この宣言の結果を図にすると、図1、図2のようになります。 図

    maangie
    maangie 2008/04/19