C言語に関するfenrir-naruのブックマーク (15)

  • Re: Alias singleton method from C

    fenrir-naru
    fenrir-naru 2020/08/17
    rb_define_aliasをsingletonに対して使う方法
  • Programming Ruby: The Pragmatic Programmer's Guide

    Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide" Copyright © 2001 by Addison Wesley Longman, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/)). Distribution of substantively modified versions of this d

    fenrir-naru
    fenrir-naru 2020/08/17
    C拡張をつくる際に読む
  • C で関数に * や & を付けられる件の説明 - Qiita

    規格として C11 (n1570) を参照する。 注意: 途中に入れた図が崩れるようなら、半角・全角比が 1:2 になるようなフォントを使って閲覧してください。 現象 wandbox で実行 ソース: ( &printf)(" &printf = %p\n", &printf); printf (" printf = %p\n", printf); ( *printf)(" *printf = %p\n", *printf); ( **printf)(" **printf = %p\n", **printf); (***printf)("***printf = %p\n", ***printf); この現象を解説する。 関数呼び出し まず、関数呼び出しについての規定を見る。 The expression that denotes the called function shall have

    C で関数に * や & を付けられる件の説明 - Qiita
  • Vim を WebAssembly に移植した - はやくプログラムになりたい

    久々のブログです. 6月ぐらいにWebAssembly の仕様をざっくり読んだので,なんか WebAssembly でやりたいなと思って,VimWebAssembly に移植してブラウザで動くようにしてみました,という話です. github.com 多分実物を見ていただくのが一番早いので,下記のリンクにアクセスしてみてください. デモページはこちら(下記の注意事項を先にお読みください) 注意 デスクトップ版の Chrome か Firefox か Safari か Edge を使ってください.どうやら macOS では Safari が一番動きが良いです. デモページは全部で1MBほどのリソースを fetch します.モバイルネットワークなどからアクセスする場合はお気をつけください. keydown でキー入力を取っているので,キー入力を横取りするブラウザ拡張などが有効になっていると

    Vim を WebAssembly に移植した - はやくプログラムになりたい
  • extension.ja - Documentation for Ruby 2.4.0

    Rubyの拡張ライブラリの作り方¶ ↑ Rubyの拡張ライブラリの作り方を説明します. 基礎知識¶ ↑ Cの変数には型があり,データには型がありません.ですから,た とえばポインタをintの変数に代入すると,その値は整数として取 り扱われます.逆にRubyの変数には型がなく,データに型がありま す.この違いのため,CとRubyは相互に変換しなければ,お互いの データをアクセスできません. RubyのデータはVALUEというCの型で表現されます.VALUE型のデー タはそのデータタイプを自分で知っています.このデータタイプと いうのはデータ(オブジェクト)の実際の構造を意味していて,Ruby のクラスとはまた違ったものです. VALUEからCにとって意味のあるデータを取り出すためには VALUEのデータタイプを知る VALUEをCのデータに変換する の両方が必要です.(1)を忘れると間違った

    fenrir-naru
    fenrir-naru 2018/01/18
    swigでRubyを書くときに使うやつ
  • gmtime/localtimeと閏秒の面倒くさい関係 | 月と燃素と、ひと匙の砂糖

    お久しぶりです、ψ(プサイ)です。 今日は今やってるプロジェクトとは一切関係なく、gmtime/localtimeの実装が気になったので、読んで分かったことをまとめておきます。 軽くおさらいですが、gmtime/localtimeは、unixtime(1970年1月1 00:00:00 AM UTCからの経過秒数)をtm構造体に入った年・月・日・時間・分・秒に変換してくれるCの標準ライブラリ関数です。unixtimeのままでは人間が到底読めないので、表示する時などに必要な関数です。 思えば、このgmtime/localtimeの実装は結構めんどくさそうです。すごくざっくりで良いなら、 年=(int)1970+(unixtime/(24*365*3600)) … みたいな感じで簡単に算出できますが、これでは全然駄目な点がたくさんあります。 うるう年は? うるう秒は? (localtimeの時

  • Cast to int vs floor

    fenrir-naru
    fenrir-naru 2017/05/30
    (int)とfloorの違い
  • C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) C言語の規格のリビジョン間には微妙な違いがありますが、このことを利用して「C90、C99、C11のどれとしてコンパイルされたかどうかにより、違う挙動をする」というプログラムを作ることが可能です。同様に、C++はほぼC言語の上位互換ですが、C言語とC++で違った結果を生み出すプログラムも存在します。 これは2015年の International Obfuscated C Code Contest (難読Cコード・国際コンテスト)への Don Yangの投稿 において、 C89、C99、C11、C++98、C11のどれとしてコンパイルされるかによって異なる出力を生成するプログラムを作成するのに使われています。C90の場合は、以下のような星形を出力します。 **************************

    C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD
  • はじめてのgdb - Qiita

    linux環境でC言語のデバッグを行う方にむけて、gdbの使い方を説明します。 初心者向けです。 gdbとは デバッガです。ブレークポイントを張ったり、ステップ実行したり、 変数の中身を覗いたり、書き換えたり...そういうことが出来ます。 gccと同様、linuxには標準でインストールされています。 昔からあるツールであり、コマンドラインでの操作を行います。 IDEのデバッガがどうしても使えない環境でのデバッグに役立ちます。 メリット、デメリット メリット: ・たいていのlinux環境で使える ・実行中のプログラムにattachしてデバッグ可能 デメリット: ・GUI画面がない。コマンドを覚える必要がある 使い方1:gdbから直接起動 ①ソースファイルを、デバッグ可能な方式でコンパイルする gcc -g3 test.c →a.outが生成 ※-g3とするとマクロの展開が可能となります。 ②

    はじめてのgdb - Qiita
  • C言語でラムダを実現する - koturnの日記

    ここしばらく忙しかったが、時間が出来たので、ここはひとつ、記事を書いてみる。 以前、Twitterに投稿したネタを、解説つきで書いてみようと思う。 テーマは、『C言語のラムダ』 ラムダは最近のプログラミング言語では、ほとんど取り入れられている機能であり、ラムダ無くして快適なプログラミングは出来ないといってもいい(?) しかし、C言語にはラムダがない、ということで嘆いている人も多いことだろう。 今回は、C言語で使えないはずのラムダをプリプロセッサで実現しようという話である。 C言語は関数ポインタがあり、関数をモノとして扱うことができる。 しかしながら、gccのコンパイラの拡張機能とプリプロセッサを用いて、少し工夫すれば、C言語でラムダを実現することは可能である。 まず、以下のように定義してみよう。 #define LAMBDA(rettype, ARG_LIST, BODY) \ ({ \

    C言語でラムダを実現する - koturnの日記
  • Designated Inits - Using the GNU Compiler Collection (GCC)

    5.20 Designated Initializers Standard C89 requires the elements of an initializer to appear in a fixed order, the same as the order of the elements in the array or structure being initialized. In ISO C99 you can give the elements in any order, specifying the array indices or structure field names they apply to, and GNU C allows this as an extension in C89 mode as well. This extension is not implem

    fenrir-naru
    fenrir-naru 2015/02/24
    GCC拡張すげぇ
  • 2進数リテラルが欲しいときのまとめ - nyanp::blog

    たとえば組み込みで,2進数っぽい文法で数値を扱いたいときがある.ドットマトリクスに顔文字アイコンを表示させるときに set_icon_data( 0x0a, // 1 1 0x0a, // 1 1 0x00, // 0x11, // 1 1 0x0e // 111 ); みたいにベタ書きなのはあまりにも悲しい.顔文字をコードで直接記述したい!でもC/C++は2進表記を直接サポートしない.じゃあどうするか. コンパイラの拡張構文を使う コンパイラによっては"0b00100000"みたいなリテラルで2進数を扱える場合もある.4.3以降のgccでもそう. set_icon_data( 0b01010, 0b01010, 0b00000, 0b10001, 0b01110 ); マクロでbinary literal風事前定義 2進数表記のようなマクロを事前に定義しておく.数が多いなら機械的に生成し

    2進数リテラルが欲しいときのまとめ - nyanp::blog
    fenrir-naru
    fenrir-naru 2013/04/25
    2進数を書く boostへぇ
  • C++用のmrubyの関数バインダを作った

    mrubyに任意の型のC言語の関数を登録するためのバインダを作りました。 mrubybind - Binding library for mruby/C++ 使い方は簡単で、mrubybind.hをインクルードしてMrubyBindというクラスのインスタンスを生成する。そして、あるC言語の関数foobarがあったとき、 #include "mrubybind.h" void init(mrb_state* mrb) { mrubybind::MrubyBind b(mrb); b.bind("foobar", foobar); } とすれば、mrubyからその登録した名前で呼び出すことができる。mruby側から渡した引数が自動的にCの関数に渡り、その関数からの戻り値がmruby側に戻る。関数をバインドした後はMrubyBindのオブジェクトは捨ててしまってokです。 以下は実装の説明。 m

    fenrir-naru
    fenrir-naru 2013/04/07
    楽をするためのオートラッパ
  • inforno :: 個人的Go雑感&メモ

    GoogleGoという新しいプログラミング言語 を出したようで。早速、インストールして軽くドキュメントを流し読みしてみました。 英語なんて読みたくないよ、という人もいるかもしれないし、誰かの役に立つかもしれないので自分用メモおいときます。完全に自分用なんである程度他の言語の知識がある人向けな上、ざっくり流し読みなんで間違ってるかも。 どんな言語? ネイティブコードを吐く、コンパイル型。 速度はCレベル。 GC搭載。ポインタはあるけど、ポインタ演算はできません。 各種アーキに最適化された、それぞれのコンパイラセットを持ちます。例: 6g, 6l : amd64 8g, 8l : i386 linux, mac, naclに対応。 動的型言語と静的型言語のおいしいとこどり。 concurrent処理が組み込まれてます。 個人的雑感 こんな言語設計思想かなあと感じたり とにかく、シンプルな言

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

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

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