タグ

cに関するtarchanのブックマーク (41)

  • Loading...

  • デニス・リッチーによって書かれた最初のCコンパイラーがGitHubで公開

    mortdeus/legacy-cc · GitHub デニス・リッチー(1941-2011)によって書かれた発展途中の初期のCコンパイラーのソースコードがGitHubで公開されている。ソースコード自体は、まだデニス・リッチー存命の頃から公開されていたが、この機会に紹介してみる。 ライセンスは許諾的で、このライセンス文を同梱すること、並びに、ソースコードから生成されたバイナリはラインセンス文を出力することとなっている。 追記:ライセンスに関してふと思った。このライセンスは名義が企業で、著作権を盾に同意を求めている。日では、映画以外の団体の著作権の保護期間は公開後50年である。UNIXと付属するソフトウェアのソースコードは当時から公開されていた。ということは、1973年に制作されたこのCコンパイラーのソースコードは、日国内では、2024年に著作権が切れるのだろうか。 詳しい経緯は、以下の

  • 標準ライブラリで提供される便利な機能

    #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stddef.h> int main ( void ) { char *decimal = "0123456789"; // 文字列 decimal から文字 3 と 7 の位置を探す。 char *three = strchr(decimal, '3'); char *seven = strchr(decimal, '7'); // 文字 3 と 7 のポインターの差を計算する。 ptrdiff_t diff = seven - three; // Visual C++では書式文字列を "diff = %Id\n" とする。 // diff = 4 printf("diff = %td\n", diff); // three + diff = 7 pr

    標準ライブラリで提供される便利な機能
    tarchan
    tarchan 2013/03/19
  • PCUnitメモ(Hishidama's C-lang PCUnit Memo)

    概要 PCUnit(Portable C Unit Testing Framework)は、JUnitのC言語版のようなフレームワーク 。 テスト結果が正しいかどうかを比較する関数や、テストを実行する関数を提供している。 Cutterの方が高機能だが、PCUnitは名前の通りポータブル。MicrosoftのしょぼいCコンパイラー(cl.exe)でも使うことが出来る。 インストール PCUnitGitHubで「ZIP」ボタンを押してアーカイブファイル(PCUnit-master.zip)をダウンロードする。 適当な場所に解凍する。(PCUnit-masterというディレクトリーが出来る) コンパイルしてライブラリーを作成する。 gccの場合は普通にmakeを実行すればOK。 MicrosoftのCコンパイラー(cl.exe)ではmakeなんて高尚なものは当然使えないので、直接コンパイルする

  • PCUnit - ひしだまの変更履歴

    C言語のテスティングフレームワークとしてはCutterがすごく便利なんだけれども、MicrosoftのしょぼいCコンパイラー(cl.exe)では使えなかったorz 改めて探したところ、PCUnitが良さそうだったので試してみた。 「ポータブル」の名に恥じない軽さで、MircrosoftのしょぼいCコンパイラーでも使うことが出来た。 アサートマクロの種類はCutterより少ないが、充分。 Cutterはtest関数を自動収集してくれるが、PCUnitでは自前で書く必要があるのは仕方ない。(Rubyで書かれた収集用スクリプトが提供されているけど) それにしてもMicrosoftのCコンパイラー(Windows SDK7.1)は今どきC99にも対応していないとは。C99ってもう10年以上前だよ? 変数を関数の途中で宣言できないし、配列のサイズにローカル変数(つまり定数以外)を指定することが出来な

    PCUnit - ひしだまの変更履歴
  • ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応

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

    ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応
  • なぜいまだにシステムプログラミングはCなのか

    Programming Language Challenges in Systems Codes システムコードにおけるプログラミング言語の挑戦、あるいは、なぜいまだにシステムプログラミングはCなのか。 著者がJonathan Shapiroであることが興味深い。Jonathan ShapiroはD&Eに頻出する名前である。Bjarne Stroustrupの記述からして、初期のC++の設計に多大な影響を与えた人物である。それに、最初にC++を使って格的で大規模なプロジェクトを始めたのも、Jonathan Shapiroだ。しかし、今日、Jonathan Shapiroの名前はC++界では、あまり有名ではない。私はMLとかHaskellなどの言語には疎いので、この方面の話は知らなかった。 なぜシステム・プログラミングは、いまだに1970年代に開発された大昔の高級アセンブリ言語で書かれてい

    tarchan
    tarchan 2012/03/20
    >ハードウェアの都合上、データは正しくアライメントされていなければならなかったり、またCでは詳細なデータ構造とそのメモリ管理を手動で行うことができるからである。
  • 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関数のバグはこうして生まれた
    tarchan
    tarchan 2011/08/29
    >「長い行を黙って切り詰める」関数
  • 史上最高に愚かしい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現更新履歴
    tarchan
    tarchan 2011/08/29
  • IPA セキュア・プログラミング講座:C / C++言語編

    IPA 独立行政法人 情報処理推進機構 セキュリティセンターによるセキュア・プログラミング講座:C / C++言語編

  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

  • C - は「LLですが、なにか?」 - Fabrice Bellard on tcc : 404 Blog Not Found

    2010年08月02日02:30 カテゴリLightweight Languages C - は「LLですが、なにか?」 - Fabrice Bellard on tcc LL Tigerが明けた直後で、文字通りの後の祭りもいいところですが… うれしいものはうれしいので、LLEvalでもサポートはじめました。 #!/usr/bin/tcc -run #include <string.h> char *fizz(int n){ return n % 3 ? "" : "Fizz"; } char *buzz(int n){ return n % 5 ? "" : "Buzz"; } char *fizzbuzz(char *buf, int n){ strcpy(buf, fizz(n)); strcat(buf, buzz(n)); if (!strlen(buf)) sprintf(bu

    C - は「LLですが、なにか?」 - Fabrice Bellard on tcc : 404 Blog Not Found
  • Cプログラミング診断室/最長不倒関数/デバッガ

  • CodeCenter - C言語のための開発ツール

  • やる夫観察日記 やる夫で学ぶプログラミング C言語入門 第1話

    1 : ◆yLAhgX0PfU :09/12/26 22:07:10 ID:P6tTRkg5                         ┏       ┓                           2nd大学                         ┗       ┛                       ___       ___                          |. : . : . : |\.    |. : . : . : |\.                          |. : . : . : |:  \. . |. : . : . : |: | \                          |. : . : . : |: | ̄: ̄ ̄|. : . : . : |: | | .\               :    

  • JNIより簡単にJavaとC/C++をつなぐ「JNA」とは(1/4)-@IT

    インターネットの普及に加えて、リッチクライアント/RIAの発展とともに、アプリケーションの形態は、C/S(クライアント/サーバ)システムから、Webアプリケーションシステムにシフトしています。一般の情報発信システムだけではなく、企業の基幹情報システムまで、盛んにWebアプリケーションで構築するようになりました。 この変化の主役であるといわれる、Java技術は、Webアプリケーションシステムの発展とともに、ネットワークの親和性や、プラットフォーム適用の多様性で、広く受け入れられて、Webアプリケーションシステム開発の基盤技術になっています。 これまでのC/Sシステムでは、サーバロジックはC/C++で実装されるケースが一般的でした。C/SシステムからWebアプリケーションシステムにシフトする際に、Java技術を導入することを決めた場合、Java技術で、すべて新規開発するのは1つの選択肢ですが、

  • C言語からJavaへの移植方法まとめ - Aoisomeの以下略

    XPCEというC言語で組まれたPCエンジンエミュレータを、iアプリのJavaへ移植しています。 やっているうちに、移植手順のちょっとしたコツに気がつきました。 そんなわけで、C言語のソースから、Javaへ移植する場合の作業について、まとめておきます。 常に動作テストできるようにする Cのソースを、いきなりJavaに拡張子変更して、中身を書き換えていくという方法をとると、 すべてをJavaコードに修正するまで、動作確認することができなくなってしまいます。 Javaに拡張子変更するのは、できるだけ後にします。 Cのソースのまま、ビルドして動かせる状態を保ったままで、Javaに無い機能を置換していきます。 Javaに無い機能を置き換える Javaに無い機能というと、 ポインタ演算子 共用体 unsigned型 マクロ などです。 これらを、使わない形のCソースに修正していくわけです。 ポインタ演

    C言語からJavaへの移植方法まとめ - Aoisomeの以下略
    tarchan
    tarchan 2009/12/10
    「Cのソースを、いきなりJavaに拡張子変更して、中身を書き換えていくという方法」
  • CocoaDystopia リリース - Psychs's blog

    Tokyo Dystopia を Cocoa アプリから使うために framework 化した CocoaDystopia をリリースしました。 http://github.com/psychs/cocoadystopia 特に Objective-C のクラスでラップしたりはしていないので、Tokyo Dystopia の C API をそのまま利用してください。

    CocoaDystopia リリース - Psychs's blog
  • おさかなラボ - [XS]XSのおさらいとtypemapについて

    前回のXSをとにかく作ってみる編の続編である。どこかに目次のエントリを作るか、Wikiにした方がいいような気がしてきた。今後、自身の学習・復習もかねてXSについて解説していく。対象は取り急ぎperl-5.8.8以上とする。なお、今回は話が思いっきりあさっての方向にそれたので、先にお詫びしておく。 XSとは何か。XSはPerlが用意したAPIに、C/C++でアクセスするためのマクロ言語である。そしてマクロ言語の記述フォーマットの名前である。「PerlAPIを叩くCプログラム」を総じてXSと呼ぶ向きもあるが厳密にはこれは正しくないことは前に述べた。 XSファイルは主に3つのパートに分けられる。Perlから関数として呼び出された時の引数を受け取る処理、そして核となるルーチン、そして演算結果をPerlに返す部分である。しかし引数と戻り値に関しては最初はあまり神経質になる必要はない。これらは大抵

  • Module::Install::ForC で C のプログラムを簡単に構築する - tokuhirom's blog

    http://github.com/tokuhirom/p5-module-install-forc Module::Install のアーキテクチャを利用した configure/SCons 等のサブセットをつくりました。 記法は SCons を参考にしており、Rake のような黒魔術的でとっつきにくい記法ではなく、シンプルでわかりやすい記法になっています(もちろん主観ですが、Rake の記法は Rake を知らない人にとって非常にとっつきにくく、見通しがわるいというのが個人的見解です。慣れても見通しがいいとはおもいませんが。。。)。 Perl Monger がちょっとした C のコードを書くときに便利なのではないかとおもいます。Module::Install をつかってるので inc/ もいっしょに配布すれば、perl5.8.0 以上さえあればうごくということになります。便利です。 最