タグ

Cに関するyokochieのブックマーク (126)

  • SwiftからC – ひよこっ!

    Cの函数は,Swiftから直接呼び出せる。 自前のソース Xcodeを使う場合 Xcodeのプロジェクトを作成(例: foo)する。 Command Line Toolを選ぶ。 言語はSwiftを選択。 Cのソースを追加。ヘッダも一緒に作る。 Bridging Headerをconfigureしてもらい,foo-Bridging-Headers.hに必要なソースを#include。 モジュールはXCodeが作ってくれはる。 コマンドライン オプション-import-objc-headerを使って名前を解決し,Swiftのソースをコンパイルする。推奨しないと断って,stackoverflowの質疑に書いてある。Xcode 6-Beta5からはSwiftコンパイラの名前がswiftcとなった。 $ xcrun swiftc -c main.swift -import-objc-header a

  • C99の仕様

    長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその

    C99の仕様
    yokochie
    yokochie 2014/02/06
    最新ってC11じゃないのって思ったけど当たり前のように取り上げられてた。
  • 21st Century C

    Read it now on the O’Reilly learning platform with a 10-day free trial. O’Reilly members get unlimited access to books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers. Throw out your old ideas of C, and relearn a programming language that’s substantially outgrown its origins. With 21st Century C, you’ll discover up-to-date techniques that are absent

    21st Century C
  • 詳説 Cポインタ

    ポインタはC言語を習得する上での最大の壁と言われ、マスターすることが難しくポインタで挫折するプログラマも少なくありません。しかし、一方でポインタをひとたび理解すると、柔軟で効率的なプログラムを書くことができます。書はC言語のエキスパートとなるために避けては通れないポインタについて、図とコードを多用して、視覚的かつ直観的な理解を促します。また、プログラムが動作するためのメモリ構造と管理方法についても理解できるので、Cに限らず他の言語(JavaC++、C#など)のプログラマにも役立つ内容となっています。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の

    詳説 Cポインタ
    yokochie
    yokochie 2013/12/16
    日本オリジナルかと思ったらそうではなかった。アメリカでもC言語まだまだ強いんですかね
  • 様々なUNIX環境のecho.cの比較

    UNIX V5, OpenBSD, Plan 9, FreeBSD, and GNU coreutils implementations of echo.c UNIX Fifth Editionのecho.cは、以下のような実装になっている。 main(argc, argv) int argc; char *argv[]; { int i; argc--; for(i=1; i<=argc; i++) printf("%s%c", argv[i], i==argc? '\n': ' '); } いかにも昔のC言語らしいコードだ。ヘッダーの#includeはなく、関数の戻り値の型も指定されない。仮引数の型も、今となっては物珍しいだろうが後書きだ。 OpenBSDのコードは以下の通り。 /* $OpenBSD: echo.c,v 1.7 2009/10/27 23:59:21 deraadt

  • PRE10-C. 複数の文からなるマクロは do-while ループで包む

    PRE10-C. 複数の文からなるマクロは do-while ループで包む 複数の文を一つのグループとして実行するために、マクロがよく使われる。 この手の仕事には、一般にインライン関数の方が適している(「PRE00-C. 関数形式マクロよりもインライン関数やスタティック関数を使う」を参照)。しかし、インライン関数を使えない場面もある(たとえば、異なる型の変数に対する演算を行うときなど)。 マクロの中に複数の文が含まれている場合、これらの文は do-while ループで構文的にひとまとめにしておくべきである。そうすることで、if 節の中など、単一の文や文のブロックが期待される箇所において、安全にマクロを使うことができる。あるいは、if文、for文、while文において、体が単一の文であっても波括弧を使用することで、マクロ中の複数の文は do-while ループを使わなくても正しく展開される

    PRE10-C. 複数の文からなるマクロは do-while ループで包む
  • mrubyでmemsetやmemcpyが少ない理由.

    リンク先には,次のような記述があります. Looks like on ARM architecture, GCC and other compilers may mis-optimize memcpy and assume certain memory alignment, whichcreates errors on unaligned access. To avoid this, either don't use memcpy, or, cast the pointers to char* to disable this misoptimization. More details here: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3934.html 意訳) ARM みたいに memcpy で

    mrubyでmemsetやmemcpyが少ない理由.
  • 第21回IOCCC入賞作品「踊る人形」 - cuspy diary

    第21回IOCCCで銀賞を頂きました。とても光栄です。 http://www.ioccc.org/2012/whowon.html 自分で書いたコードですが、もう既に理解できなくなってく来ているので早うちに解説を残しておきます。 作品のテーマは最も難解な部類に入るファイルフォーマットであるPDFと、あえて難解に書いたC言語のコラボレーションです。 このプログラムはテキスト文字列を入力として受け取り、難読化したPDFファイルを出力します。 この難読化手法は、有名な推理小説「踊る人形」に登場する単一換字式暗号です。 たとえば、 % gcc -o hamano hamano.c % echo 'Hello World!' | ./hamano > hello.pdf と実行すると以下の様なPDFを出力します。 このPDFファイルは、Adobe Acrobat Readerやevince, Xpd

    yokochie
    yokochie 2012/10/22
    ソースコードみたら噴いたwww
  • 第(1+1)回 六本木 Linux カーネル読書会 (2012/08/01 19:30〜)

    Linux Kernel のソースコード(MUST)glibc のソースコード(MUST)ソースコードを快適に閲覧できるデバイス(MUST)読み書きに不自由しないだけのC言語の知識と経験(MUST)Linux カーネル 2.6 解読室(OPTIONAL)

    第(1+1)回 六本木 Linux カーネル読書会 (2012/08/01 19:30〜)
  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

    前回の記事『プログラム初心者にC言語のポインタを不意ながら教える羽目になったなら、こう教えると良いよ』でポインタの教え方を書きました。ソレに対して「そもそもどうしてポインタっていう仕組みがあるの?」という質問をもらったので、つらつらと書こうと思います。稿は「ポインタがある理由の教え方」ではなく「ポインタがある理由」です。分かっている人には相当に退屈な文章ですのでそういう人は読まずにお帰りください。 で、えーと、結論だけ先に言うと省メモリ化のため、次に速度アップのため、そして生産性アップのためです。 1. メモリは有限である。 マシンに搭載されているメモリには限りがあります。メモリ空間は広大ですが、無限ではないのです。 好き放題にどんどんメモリを使ってデータを格納するわけにはいかないというわけです。しかしプログラムは計算のためにメモリ空間を占有します。仮に↓こんな感じに、わずかな有限メモ

    yokochie
    yokochie 2012/06/18
    『用途に応じて適切なプログラミング言語を使えば良いだけです。』 / OSを作るために作られた言語という前提を抜いて(?)教えているのがいけないような
  • ポインタの裏話

    ポインタの裏話 岡﨑 直観 okazaki at ecei.tohoku.ac.jp http://www.chokkan.org/ @chokkanorg ポインタの裏話 プログラミング演習A 1 このような説明を 覚えていますか? 知らなくても全く問題ありません ポインタの裏話 プログラミング演習A 2 int x = 0; &xは変数xの「アドレス」 「番地」「住所」を返す 変数x 0 &x メモリ空間, 記憶空間 変数xのアド レス(住所) ポインタの裏話 プログラミング演習A 3 ____ / \ 何言ってたんだこいつ? / ⌒ ⌒\ 番地 アドレス ぬるぽ / (●) (●) \ \ / | 、“ ゙)(__人__)" ) __________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | || / , \n||

    yokochie
    yokochie 2012/06/04
    裏話ではないだろう / 計算機の仕組みについてざざっとわかる資料
  • XXmallocのメモリ管理アルゴリズムについてわかりやすい記事 - Qiita

    dlmalloc, tcmalloc, jemallocについて,以下の各記事を読めば各mallocのアルゴリズムはわかるはず. dlmalloc Linuxの一部やAndroidのDalvik VMで利用されている.シンプルながらうまく考えられている. チャンク(連続空き領域1つ)の境界と構造体の境界が違う所が罠. http://g.oswego.edu/dl/html/malloc.html http://mkosaki.blog46.fc2.com/blog-entry-241.html にわかりやすい講演資料が,と思ったら動画がprivateになってる… tcmalloc thread-caching malloc. Googleで利用されている. スレッドがキャッシュ持つのでfreeしてもメモリ利用量が減らない!のが罠. http://goog-perftools.sourcef

    XXmallocのメモリ管理アルゴリズムについてわかりやすい記事 - Qiita
  • ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応

    IPA(独立行政法人情報処理推進機構)は、 C言語で作成されたソースコードに脆弱性が存在しないかどうかを検査するツール「iCodeChecker」を公開しました。無償で利用できます。 iCodeCheckerは、ソースコードの脆弱性が存在する箇所を検出し、修正例や脆弱性が悪用された場合の脅威についてのレポートを出力するツール。プレスリリースから引用します。 ツールは、脆弱性やソースコード検査技術を学習したい学生や開発者を対象に、利用者自身が作成したソースコード(C言語)を検査することできます。 ツールでは、ソースコードの脆弱性が存在する箇所を検出し、修正例や脆弱性が悪用された場合の脅威について解析したレポートを出力します。利用者はツールを通して、脆弱性を学習するとともに、ソースコードセキュリティ検査技術の有効的な活用方法を習得することができます。 配布形式は、VMイメージ、パッケージ

    ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応
    yokochie
    yokochie 2012/05/08
    『構造体を使用していないソースコード』冗談キツイぜ...
  • C言語における文字列連結 — KaoriYa

    C言語で文字列連結を行う。とても簡単に思えるけれど、実はパフォーマンスについて考えることもあるんだよ、というお話。 C言語で2つ文字列の連結して、1つの文字列にするプログラム(関数)を書けるでしょうか? ちょっとC言語でプログラミングを学んだことがあれば簡単ですよね。要求仕様としては2つの引数aとbをとり、どちらもNULターミネートな文字列で、その文字列をヒープから確保した領域で連結して戻り値として返す、という感じの動作です。ヨユーですね。ちょっと書いてみてください。 char* str_join(const char* a, const char* b) { char* p = malloc(strlen(a) + strlen(b) + 1); strcpy(p, a); strcat(p, b); return p; } こんな風に書いてしまったあなたは及第点です。個人的には失格です

  • Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog

    はじめに Ruby Advent Calendar jp: 2011 : ATNDの17日目の記事です。昨日は@yoppiblogさんのSeleniumの自動テストをCI環境(Jenkins)で快適に実施するでした。 Rubyを使ってて 遅い…ここだけ超遅い… とか あのライブラリが使いたい!でもRuby用のライブラリじゃないし… みたいなこと、ありますよね? そんなとき、Rubyの拡張ライブラリで解決できるかもしれません。 Rubyの拡張ライブラリは、普通のライブラリと異なりC(とかC++とかその他の言語とか)で作成します。そのため、Rubyで直接書くよりも高速に処理できたり、Cのインタフェースが用意されているライブラリをRubyから呼びだしたりすることができます。すばらしい! そんなわけで、拡張ライブラリの作り方をざっくり説明したいと思います。 用意するもの Cコンパイラとかmakeと

    Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog
  • 史上最高に愚かしいCのバグとは何か - YAMDAS現更新履歴

    The most stupid C bug ever | elpauer 先日は徳丸浩さんによる PHP5.3.7 の crypt 関数におけるバグの解説を読み、世界的に有名なオープンソースソフトウェアでもこんな初歩的なミスをやらかすのかとすごく親近感が湧いてしまったが、Pau Garcia Quiles が語るこれまでで最も愚かしい C のバグとは何か? 彼はテンポラリファイルを tmpfile() で作る Unix アプリケーションの移植をやっていた。 else if (code == 200) { // Downloading whole file /* Write new file (plus allow reading once we finish) */ g = fname ? fopen(fname, "w+") : tmpfile(); } マイクロソフトの tmpfile

    史上最高に愚かしいCのバグとは何か - YAMDAS現更新履歴
    yokochie
    yokochie 2011/08/29
    バックスラッシュの後にスペースがあるだけでも挙動が変わるとか恐ろしい
  • PHP5.3.7のcrypt関数のバグはこうして生まれた

    昨日のブログエントリ「PHP5.3.7のcrypt関数に致命的な脆弱性(Bug #55439)」にて、crypt関数の重大な脆弱性について報告しました。脆弱性の出方が近年まれに見るほどのものだったので、twitterやブクマなどを見ても、「どうしてこうなった」という疑問を多数目にしました。 そこで、このエントリでは、この脆弱性がどのように混入したのかを追ってみたいと思います。 PHPのレポジトリのログや公開されているソースの状況から、PHP5.3.7RC4までこのバグはなく、PHP5.3.7RC5でこのバグが混入した模様です。RC5はPHP5.3.7最後のRelease Candidateですから、まさに正式リリースの直前でバグが入ったことになります。 バグの入る直前のソースは、ここの関数php_md5_crypt_rから参照することができます。以下に、おおまかな流れを図示します。まずはバ

    PHP5.3.7のcrypt関数のバグはこうして生まれた
    yokochie
    yokochie 2011/08/24
    自分でもやらかしそうなバグ / PHP、関数多いからテスト大変そう
  • partake.in

    This domain may be for sale!

  • 米Intel、並列プログラミングのためのC/C++言語拡張「Cilk Plus」をオープンソース化。GCCへの実装も開始 | OSDN Magazine

    米Intelが並列プログラムを容易にする言語拡張「Intel Cilk Plus」をオープンソース化し、またGCCへの実装が「cilkplus」ブランチで開始されたと発表した。x86_32およびx86_64アーキテクチャでテスト済みというLinux向けランタイムのソースコードも公開されている。 Cilk PlusはIntelが2010年に発表したC/C++向けの言語拡張。1990年代にマサチューセッツ工科大学で開発されたC言語拡張「Cilk」がベースで、プログラムの並列化を容易に実装できるキーワードや関数群が含まれる。Intelは2009年にCilk技術ベンダーのCilk Artsを買収し、Cilkの権利や技術を手に入れている。Cilk PlusはすでにIntelがリリースする「Intel Compiler」に搭載されているが、GCCなどほかのC/C++コンパイラではサポートされていなかっ

    米Intel、並列プログラミングのためのC/C++言語拡張「Cilk Plus」をオープンソース化。GCCへの実装も開始 | OSDN Magazine
    yokochie
    yokochie 2011/08/18
  • Cライブラリを書くベストプラクティス - YAMDAS現更新履歴

    LWN.net で知ったのだが、David Zeuthen という人が、C 言語でのライブラリについて網羅的なガイドを公開している。 現時点でパート5まで書かれているが、これで全部なのだろうか。いずれにしても相当な量である。これはいずれ書籍化されるんじゃないかしら。個人的にはネットワーキングが対象外なのが残念だが、確かにここで扱う話じゃないか。 この分野はCが生きる場所じゃないかね。

    Cライブラリを書くベストプラクティス - YAMDAS現更新履歴