タグ

Cに関するlarkerのブックマーク (19)

  • linuxカーネルで学ぶC言語のマクロ - Qiita

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。

    linuxカーネルで学ぶC言語のマクロ - Qiita
  • やり直しC言語:複雑な宣言の読み方

    C言語は宣言文が非常に読みにくいことで有名で、後発のGo言語はこれを批判して宣言の構文を変えています。私もずっと読むのが苦手だったのですが、私の頭が悪いのではなく、C言語の仕様がヘン、ということらしい。 今まで飽きるほどこの手の解説は書かれてきてるわけですが、自分なりにまとめないと覚えた気がしないので、あえてまとめておきます。ここに書いてある内容は、「C言語ポインタ完全制覇」に詳しく書いてあります。 型の派生 C言語では、int, char, floatなどの基型から、配列やポインタを派生していくことができます。対象を並べたものが配列で、対象を指し示すのがポインタです。 配列やポインタからも配列やポインタを派生できるので、派生パターンは無限に存在します。 int int の配列 int の配列 の配列 ... int へのポインタ int へのポインタ へのポインタ ... int への

    やり直しC言語:複雑な宣言の読み方
  • Ruby FFIを使ったエクステンションの作り方 - Boost Your Programming!

    Ruby FFIについて ここ最近libclangのRuby Bindingのffi-clangに機能を追加していたのですが、その過程でFFI(Foreign function interface)というものを知りました。FFIとはようするに多言語を呼び出すためのインターフェイスのことのようで、RubyにおけるFFIはlibffiを利用しているようです。 Rubyでは(C言語で)エクステンションを書けば共有ライブラリを利用するようなライブラリ(Gem)を作ることができますが、FFIを使えばRubyで書くことができますしポータブルな実装になります。家曰く: コンパイルが必要無い マルチプラットフォーム(変更無しでJRubyやRubiniousなどで動作する) 記述がRubyなので読み書きしやすい Rubyの実装の変更に影響されない 実際FFIを使ってみると、単純なものなら一瞬でバインディン

    Ruby FFIを使ったエクステンションの作り方 - Boost Your Programming!
  • わずか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」 | ソフトアンテナ
  • RubyによるC拡張ライブラリの作成方法

    ◆ 目的 Cで書いたコードを動的(あるいは静的)にリンクさせ、Rubyを高速に動作させる ◆ Cで置き換えるRubyのコード 下記のRubyコードをCで置き換える コード自体に深い意味はない、ただのサンプル用である class Counter def initialize @count = 0 end attr_reader :count def increment @count += 1 end end ◆ 利用例 test.rb # Cで書き直し、ビルドした共有ライブラリを取り込む require 'counter' # あとは普通のRubyコードど同じ要領で利用できる cnt = Counter.new puts cnt.count cnt.increment puts cnt.count $ ruby test.rb 0 1 ◆ Cによるクラス定義 Ruby拡張ライブラリ(共有ライ

    larker
    larker 2013/12/27
    cのsoファイルをrubyで読み込む
  • 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

  • Javaはスクリプト言語より速い・・・のか?

    『プログラミング言語人気TOP10の簡易解説』という記事が人気を呼んでいたのだが、軽快な語り口で面白い読み物だが、語弊がありそうな部分がある。その中で特に、「(Javaは)実行速度はCに及ばないもののスクリプト言語よりは数十倍速い」とある部分が気になったので、簡単な例で検証してみた。 1. PythonPHPJava、Cで不適切な速度比較を行う 最初にコーディングが不適切な場合にプログラミング言語の速度比較を行うと、通説と異なる結果になる事を示したい。 Ubuntu Linuxで、オブジェクトをなるべく使わずに、順列の整数を100万個生成し、ランダムにシャッフルし、クイックソートを行ったときの経過時間を、timeコマンドで計測したものだ。ソート前、ソート後に配列の内容を、", "で連結して標準出力に書き出している。また、PythonAPIをなるべく使ったもの(*無し)と、なるべく使わ

    Javaはスクリプト言語より速い・・・のか?
  • C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター

    これまでにC/C++ セキュアコーディングセミナーで使用した講義資料を公開しています。2010年度にセミナを実施した、文字列、整数、動的メモリ管理、書式指定文字列、CERT C セキュアコーディングスタンダード、ROSE については、それぞれ最新版の資料を掲載しています。 文字列 ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。 また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。 文字列では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。 C/C++ における文字列の特性 犯しやすい文字列操作の間違い 文字列の脆弱性 プロセスのメモリ構成 スタック破壊の仕組み コードイン

    C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター
  • strcpy や memcpy と愉快な仲間たち - いけむランド

    以前 strcpy とか memcpy の実装の違いが気になったので、ちょっと調べてみた時の話を加筆・修正した。 まずはとてつもなく適当なテストプログラム。 #include <stdio.h> #include <string.h> #include <sys/time.h> #define BUF_SIZE 0x10000000 #define TRIAL_COUNT 5 char src[BUF_SIZE], dst[BUF_SIZE]; int main(int argc, char** argv) { printf("src : 0x%08x\n", src); printf("dst : 0x%08x\n", dst); puts(""); memset(src, 0xff, BUF_SIZE); src[BUF_SIZE - 1] = 0; memcpy(dst, src,

    strcpy や memcpy と愉快な仲間たち - いけむランド
  • 総合目次 - 苦しんで覚えるC言語

    苦Cの内容の転載などは自由ですが、苦Cからの引用であることを明記してください。 (どこかに「苦Cより」と書かれていればOKです。) 学校や会社などで生徒(新入社員)へのテキストとして使用することも自由です。 その際、内容を修正したり、印刷して配布するのも自由です。

    総合目次 - 苦しんで覚えるC言語
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

  • MAKEの第一歩(入門)

    makeというコマンドは、Makefileというファイルの記述に従ってファイ ルの更新を行なうユーティリティです。 と書いてもよくわからんだろうなぁ(^^; まあ、最初のセクションmakeって何するもん?でも読んでみてください。 このページの目標地点は入門の手前あたりまでです。「makeって聞いた ことはあるけど」とか「ちょっと触ってみようかな?」というレベルを 対象に書いてみました。「Makefileって最初だけを大文字にしなくちゃ いけないの?」などということさえ書かれていません。そのへんはman かinfoか成書で調べてください。 なお、このページ中で $ ls などと書いてあるときの$はコマンドプロンプトです。 目次 makeって何するもん? もっとも簡単な例 複数ファイルの場合 マクロの利用 ターゲットの生成方法の指定 ちょっとした応用 C以外にmakeを使う サフィックスルール

  • PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋

    PHP で汎用的なライブラリを作成するフレームワークには大きく分けて2種類あるようです。 ひとつは PEAR のように PHP でクラスライブラリを作る方法、もう一つが今回紹介する PECL の様に PHP 自体を拡張するモジュールを書く方法です。 なぜ PHP Extension ? ひとつは、過去に C で書かれた既存のライブラリを流用したい場合に PHP Extension を作成すれば自然に PHP のコードに結合することが出来ます。また、PEAR の様に PHP で書いたコードと比べると若干高速になります。 それでは実際に helloworld という名前の PHP Extension を作成してみましょう。PHP のソースを展開すると php-x.x.x/ext というディレクトリがありますので $ cd php-x.x.x/ext $ ./ext_skel --extname

    PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋
  • http://www.ecoop.net/coop/php4/how2use_GD.html

  • psqlodbcの問題対策

    w3m の configure のエラー。 w3m の configure で、以下のエラーが出た。 checking size of long long... configure: error: cannot compute sizeof (long long), 77 See `config.log' for more details. 環境は RedHat9 / FedoraCore4 での Linux 。これを調べてみる。まず、この 環境でやったことは、 w3m で必要な libgc である Boehm GC をインストール したこと。これは、 source をとってきて ./configure; make install ぐらいを したのみ。w3m のバージョンは最新(と言っても、日付は2004年か…)の、0.5.1 を使った。これを解凍して configure すると。 [to

    larker
    larker 2010/08/25
    so のリンク先が見つからない場合
  • cannot open shared object file - 下品だったり違ったり。

    ■エラー unixやらlinuxでアプリを実行しようとして以下のメッセージが出たとき [cannot open shared object file: No such file or directory] たぶん使うライブラリが見つかってない。 ■対処 ・必要なライブラリを調べる。 ldd [アプリ名] で必要なライブラリと、 ライブラリの在り処がわかってるかどうかが表示される。 libxerces-c.so.21 => not found ↑のように表示されるときはライブラリの場所が分からんよ。 ということなので shellのライブラリ検索用パスを設定する変数 LD_LIBRARY_PATH にパスを設定してやる。 ・LD_LIBRARY_PATHへの設定 今使ってる環境では setenv LD_LIBRARY_PATH [ライブラリを検索するディレクトリのパス] で設定できた。 ■--

    cannot open shared object file - 下品だったり違ったり。
  • JPEG画像ファイルの読み込み(IDGライブラリ使用)(dinop.com)

    解説 Independent JPEG Groupが提供しているJPEGライブラリを使用したJPEGファイルの読み込み。 ライブラリ作成時はライブラリのソースファイルには一切変更を加えずにライブラリをビルドしlibjpeg.libを得る。 ※ ヘッダーファイルに変更を加えれば「extern "C"」や「XMD_H」の定義、RGBの並び順変更などをライブラリ利用時に行なう必要がなくなる 読み込んだ画像はCBitmap形式でCJpeg::m_lpcBitmapに保存される。 グレースケールJPEGファイルなどには未対応。 使用例 //jpgファイルの読込 void test(void) { CJpeg cJpeg; cJpeg.SimpleOpen("Dscf1998.jpg"); } extern "C" { #define XMD_H // INT32の再定義エラー防止 #include

  • Cプログラミングに必要な環境をそろえよう

    プログラミング言語の基となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部) 第1回「プログラミング言語Cについて知ろう」では、Cの成り立ちから特徴、その用途までを説明しました。なぜ、Cを学ぶことが重要なのかが理解できたと思います。 Cプログラミングを始めるにあたって、開発に使う環境をきちんと整えることが大切です。今回は、Windows用のCコンパイラとデバッガが含まれているMinGWと、グラフィカル開発環境のEclipseが1つのパッケージになった「Pleiades(プレアデス)」をセットアップし、最初のプログラムを動かしてみるところまで説明します。 MinGWとEclipse、Pleiades Cプログラミングで利用する統合開発環境には、Cコンパイラ、ソースプログラムエディタ、デバッガなどが含まれていて、各機能を効率よく利用できるようになってます。こ

    Cプログラミングに必要な環境をそろえよう
  • c-language Archives - ファイヤープロジェクト

    Skip to contentCategory: c-language095月2020 パッドウィンドウは物理画面や親ウィンドウの範囲内に収まって... Fujiko c-language, feature112月2020 popenとpcloseパイプのopenとclose.popenとpclos... Fujiko c-language, feature0811月2007 セマフォ共有メモリの話題に入る前の準備としてセマフォについて... Fujiko c-language, feature0711月2007 bzlibでbz2ファイルを読み書きしてみるbz2はメモリを喰うがzlibより圧縮効率がよいらし... Fujiko c-language, feature0711月2007 BIOとBase64BIOはOpenSSLにおけるフレームワークにおける... Fujiko c-lan

  • 1