タグ

*とCに関するmaangieのブックマーク (19)

  • 侍エンジニア塾の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 は関数とかマクロじゃなくって、演算子だってコトを理解してないんじゃないかな。「コード憎んで、人を憎まず」
  • わずか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 (原名): 本
  • 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
  • シフト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
  • 【レポート】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
  • C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan

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

    C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan
    maangie
    maangie 2008/04/01
  • gcc の組織はどうやって開発を進めているのか? - ひげぽん OSとか作っちゃうかMona-

    多くの人がお世話になっているコンパイラ gcc 。 この gcc の組織がどのように開発を進めているかという記事が Reddit に挙がっていました。 How Does the Gcc Organization Work? 原文を読んでもらうのが一番良いのですが、gcc が珍しい点として以下の項目があげられています。 20年間もアクティブなフリーソフトウェアプロジェクトであること。 多くのアクティブな貢献者がいること。 特定の1つの会社や組織と関連があるわけではないこと。 比較的インフォーマルな組織構造であること。 1人の中心的なメンテナがいるわけではない。 1997年に egcs プロジェクトとしてフォークするという大きな組織的転換を生き抜いたこと。そして結局それが開発のメインラインとなったこと。 「1人の中心的なメンテナがいるわけではない。」というのは意外ですね。

    gcc の組織はどうやって開発を進めているのか? - ひげぽん OSとか作っちゃうかMona-
    maangie
    maangie 2008/03/19
  • C言語のソース実装 - Florian’s NewestDiary

    id:minekoaさんの以下のエントリーを読んでつらつらと。 [C++] 漢の言語(http://d.hatena.ne.jp/minekoa/20080310/1205146973) 一時期、何でもかんでも巨大なライブラリアーカイブ(.a,.lib)に放り込むというコーディングスタイルを持っていた時期がありました。 結構いろんなメリットがあって、 ライブラリ自体が巨大でも、ライブラリ内のモジュール依存性が低いと実際にリンクされるのは一つだけ。 C言語はエントリーポイントを一つしか持てないので、ユニットテストがやりづらいのを切り分けられる(番時もmain関数のみのソースをリンクするのみ) コンパイルの時間が省略される まぁ、生でC言語を触ることが極端に減ったのでこの辺の好みは今となってはあまり生かされていないのですが、他にもこんな方針を同時に立てていました。 関数は1画面以内。それも、

    C言語のソース実装 - Florian’s NewestDiary
  • gcc 勉強会したい - takkan_mのNo planな日常

    今日、ちょっとソースを読む時間があったのですが、ひさしぶりに知らないgccの拡張記法にであいました。 int hoge [] = { [0..10] = 3 }; どうやら、これで配列のindexが0から10までを3にした配列になるようです。いやぁ、gccが独自に拡張記法をもっているって知らずに、いきなりであったらぎょっとしますね(僕は知ってて読んでぎょっとしましたが)。 それから、フリーソフトウェア徹底活用講座をてきとうに眺めていたんですが、gccは変数名に"$"を許してくれるみたいですね。なので、こんなコードも見事にコンパイルしてくれます。 $ cat add.c #include <stdio.h> #define my int my main() { my $a = 4; my $b = 3; my $c = $a + $b; printf("%d + %d = %d\n",$a,

    gcc 勉強会したい - takkan_mのNo planな日常
    maangie
    maangie 2008/02/27
  • clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション

    Emacs エディターで C 言語のプログラムを書く人向けに、入門用の解説がないように思う。そこで、知っておくと便利な機能をまとめてみた。 読者は、Emacs の操作とカスタマイズが最低限できる人を対象にしている。つまり、C-x C-f といったショートカット・キーが使えて、.emacs の設定ファイルがいじれる人。各機能について、基的な使い方とその効果、あと最低限の設定について書き出した。 目次 ソースの色付け インデント アラインメント コメント info マニュアル スペル・チェック タグ・ジャンプ 関数名の補完入力 コンパイルとエラー行ジャンプ ChangeLog ファイル 1. ソースの色付け Emacs は、C 言語のソース・ファイルを解析して、if や for といったキーワードに対して、自動で色を付ける。 色を付けることでソースにメリハリが生まれ、可読性が上がる。また、ス

    clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション
    maangie
    maangie 2006/12/19
  • 1