タグ

Cに関するfa11enprinceのブックマーク (9)

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

    fa11enprince
    fa11enprince 2018/11/02
    面白そう。これは嬉しい。
  • テキストファイルの全部を読んで行単位にする - 主題のない日記

    プログラミング言語 C でテキスト処理をしようと思うと何かと面倒なことは多い。 ただ行ごとに読むというだけのことにでもひどく手間をかけさせられてしまう。 それをなんとか工夫して実装しようとしている記事を読んだ。 もう 20 年ほど前のことになるが、私はチャット CGI を C で書いたことがあり、その中で似たようなことをやったというのを思い出した。 そのときの技法 (というほど大したものではないが) を紹介したいと思う。 考え方 結局ファイル全部を読むのだから一度に読んでしまえば良いではないかというのが基的な発想だ。 fread 関数を使ってテキスト全部を読めば改行で区切られたひとつの文字列が出来上がる。 改行をヌル文字に置換えた上でそれぞれの行の先頭を指すポインタの配列を作れば、見掛け上は行ごとの文字列になっているかのように見える。 ちなみに、以下の実装では改行が 0d 0a の2バイ

    テキストファイルの全部を読んで行単位にする - 主題のない日記
    fa11enprince
    fa11enprince 2016/01/29
    素晴らしい技法です!使い方も自然だし。
  • 【C言語】catコマンド · YutaroHayakawa/MEMSYS Wiki · GitHub

  • Cマクロによる似非lambda - Qiita

    C言語への感謝の正拳突き 1日目です。 概要 タイトルは「マクロによる似非lambda」とか偉そうなことを言ってますが、 要はマクロを使って重複した宣言や記述を取り除ためのtipsの紹介です。 冗長な関数定義、switchのcase定義、structの定義 などにおける繰り返しを除去し、マクロを使って一ヶ所に纏めることができます。 似非lambdaは3ステップから構成されています。 (1) 繰り返し要素のリストを定義するマクロ (2) 手続きを定義するマクロ (3) リストのマクロを手続きのマクロを使って展開する 具体例 Dart SDK(ただしこいつはC++)から引用しました。 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V) \ ...(1) V(_IntegerImplementation, _addFromInteger, Integer_add

    Cマクロによる似非lambda - Qiita
  • C/C++で行数を数えるときの注意とwcコマンド - Gobble up pudding

    C/C++を使っているとファイルを読んで、メモリ上にデータを格納したいときに メモリをどのくらい確保する必要があるか調べるのに行数を数えることが多いかと思います。 だいたいは以下の様なコードを書かれたことが多いのではないのでしょうか? 私はよほどパフォーマンス上の問題がない限りC++流儀のものを使ったほうがいいと思いますが……。 下記は行数を調べてその分だけ配列を確保して文字列をメモリに読み込んでいるコードです。 100万行のテキストを読み込んでいます。 てかvector使え……うわなにをするやめ…くぁwせdrftgyふじこ ※補足 ただしこの方法はファイルフォーマットがガチガチに決まっていて、 一行あたりの最大文字列が規定されているときのみに使える方法です。 もし、そうではなくて特にルールがないファイルだとすれば うまくバッファリングを考慮したコードを書くしかありません。 もしくは多少メ

    C/C++で行数を数えるときの注意とwcコマンド - Gobble up pudding
    fa11enprince
    fa11enprince 2015/01/24
    行数を数えるコマンドの記事改定
  • Super Technique 講座〜ハッシュテーブル

    ハッシュテーブルは、中級の基技である。「ハッカー」と呼ばれる程のプログラマならば、使いなれた自作ハッシュライブラリを持っていて当然である。また、これは非常に検索が速く便利なために、awk から Perl に至るスクリプト言語で、言語仕様に採り入れられてよく「連想配列」などと呼ばれている。要するに、 $List{'http'} = 80; のように、配列なのに文字列を添字として取るような書き方をするアレである。これは「キー」である文字列に対して、「値」である何かのオブジェクトを返すという動作であり、そういう動作こそが「ハッシュテーブル」以外の何者でもない。ものすごく便利なので、ぜひマスターされたい。→ Java 講座の「ハッシュテーブル」 準備~リスト版線形探査 ハッシュテーブルの原理 ライブラリの実装 他の応用 Java の Hashtable クラス 準備~リスト版線形探査 ハッシュテ

  • N1875: C言語にクラスを追加する提案

    ask.fmで、面白い質問が来た。なんと、C言語にクラスを追加する提案論文が、先月末に公開されているというのだ。 N1876: Adding classes to C C言語の標準規格は追っていないのだが、なかなか興味深い。 この提案は、C言語にC++風のクラス機能を追加する提案だ。ただし、C++のクラスをそのまま持ってくるのではなく、だいぶ保守的な採用の仕方をしている。 この論文で提案されているクラス機能は、C++の文法によく似ている。クラスstructかclassキーワードで宣言する。アクセス指定子もあり、structはデフォルトでpublic、classはデフォルトでprivateなのも、C++と同じだ。 派生はあるが、多重派生は認められていない。 virtual関数やRTTIはない。 また、C++にある、自動的に呼ばれるコンストラクター、デストラクターは存在しない。 かわりに、イニ

  • Bi-Directional Linked Lists

  • おれのC言語がこんなに遅いわけがない!〜プログラミング言語速度比較パート2 「C」vs「Java」〜 | 株式会社メイプルシステムズ

    こんにちは、西山です。 今日は前回書いた記事 俺の言語がこんなに遅いわけがない!? 〜C, Java, PHP, Python, Rubyによるプログラミング言語 速度比較〜 の続編を書いてみたいと思います。未読の方はこちらを斜め読みしてからのほうがよいかもしれないです。 この記事ですが、「長すぎだよ。3行で頼む。」という方のために3行で書くと、 C プログラムより Java プログラムのほうが実行速度が速いことがありました。 それは、Java の JIT コンパイラが働いて最適化されたネイティブコードが生成・実行されていたからです。 C のほうもコンパイル時にきちんと最適化すれば Java ごときに速さで負けることはありません! という内容です。長い記事にお付き合いくださる方は以下よろしくお願いいたします。 前回のあらすじ・・・ 前回の記事ではいろいろなプログラミング言語で書いたプログラ

    おれのC言語がこんなに遅いわけがない!〜プログラミング言語速度比較パート2 「C」vs「Java」〜 | 株式会社メイプルシステムズ
  • 1