タグ

Cに関するmitsuki_engawaのブックマーク (29)

  • C言語最大の欠点

    1980年代、筆者が高校生・大学生だったころに「C言語がすごい」という話を友人から聞いていた。しかし、当時の筆者が触れていたのはMSXパソコンのBASICと大学の汎用機のFortranくらいだった。C言語をやっと手に入れたのは、1992年の暮れである。清水の舞台から飛び降りるような気持ちでBorland C++の大箱を買って帰った。 それから20年近くが経過した今でも、C言語は「最強のプログラミング言語」と呼ぶべきポジションを確保し続けている。UNIXオペレーティングシステムとC言語が世界に与えたインパクトの大きさは、実に大きなものがあった。 ただ、C言語を学習したり評価したりする際には、C言語の大きな欠点を知っておく必要があるだろう。筆者が考えるその大きな欠点とは、「文字列の扱いが非常に面倒」であることだ。 「バッファオーバーフロー」を回避するのは大変 例を示そう。図1はC言語で記述した

    C言語最大の欠点
    mitsuki_engawa
    mitsuki_engawa 2010/10/21
    また 2000 年頃の記事の発掘かと思ったら違うらしい。1992 年頃なら LSI-C86 試食版とかもうあったような。
  • [Prog] C 言語のヌルポインタ(NULL pointer) の意味について - NAKAMURA Minoru's Diary

    2002 | 10 | 11 | 12 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1

    mitsuki_engawa
    mitsuki_engawa 2010/04/26
    「C 言語のヌルポインタ(NULL pointer) の意味について」「AIX の 0 ページの最初の2ワードは 0xdeadbeef 0xbadfca11 が設定されており(中略)飛び先となるアドレスは不正境界」ぶはww
  • 最新Cコンパイラーの最適化事情 - Radium Software

    State of the art C compiler optimization tricks, Felix von Leitner, Linux Kongress 2009. 最近のCコンパイラーの最適化能力についてまとめたプレゼンテーション。定数の扱いやインライン展開などの基的な項目から始まって,分岐の削除やベクトル化, SIMD 化など,最新のコンパイラーに搭載されている様々な機能について調べている。 この手の分岐の削除はほとんどのコンパイラーで有効らしい。 ベクトル化については gcc がだいぶ頑張っている印象。 「gcc は全プラットフォームにおいてビデオコーデックプログラマーより賢い」 これらの最適化が実際のコードでどのように機能するか気になって逆アセンブリコードを覗いてみる人も少なくないと思うけれど,それを代わりにやってくれた感じだ。この手の話題に興味がある人ならば,目を通

    最新Cコンパイラーの最適化事情 - Radium Software
  • C/C++に文字エンコーディングバリデーション機能がないって、ほんと? - kazuhoのメモ置き場

    通りすがり (2009-09-16 18:09) > PHP以外の言語は「(略)」のに対し ここに挙げられている言語がWebアプリで使われる全ての言語ではない。 例えば、CやC++にはない。付け足せば、PHPPerlなどのCモジュール内部で起こった不正な文字はスルーされうる。 よって、「PerlJava、.NETRubyPHPの中では」と書けば筋は通るが、「PHP以外では」は誤り。 そしてそんなことを、PHPの(脆弱性撲滅に注力している)開発者に言ったら、喧嘩を売られたと受け止められて当然。 PHP以外では: 既にあたり前になりつつある文字エンコーディングバリデーション - 徳丸浩の日記(2009-09-14) というコメントが気になった。 C言語にある文字コード変換機能って言ったら mbtowc だと思うけど、mbtowc は無効なバイト列を受け取ると EILSEQ を返すことに

    C/C++に文字エンコーディングバリデーション機能がないって、ほんと? - kazuhoのメモ置き場
  • KMC Staff Blog:素朴な C (pre K&R C) のお話

    2009年07月03日 素朴な C (pre K&R C) のお話 1969 年に Bell Lab の Kenneth L. Thompson と Dennis M. Ritchie がプロトタイプを作成した時から数えて、今年は UNIX 40 周年の節目だそうです。UNIX の 1/4 世紀というがありますが、あと10 年したら UNIX の半世紀ですね。 ちょっと昔の話をしたいと思います。35 年近く前の C の話です。(もちろん私は 20 代なので、まだ生まれてません。)1975 年、UNIX v6 がリリースされました (後の BSD UNIX につながる版です)。この版は pre K&R C という、現代の C (C99) から見ると非常に素朴な C で実装されています。 Dennis M. Ritchie, "C Reference Manual" (1975) http:

  • 革命の日々! glibc 2.10 news

    元はUlrichのBlog 時期的に考えると、Fedora11/RHEL6用のlibcになるのかな? http://udrepper.livejournal.com/20948.html 以下、要約 ・strchrの実装を変えたよ。 strchrは規格上 char *strchr(const char *, int) のようなプロトタイプをもつけども、これはCがオーバーローディングをサポートしない事による制限で 来は char *strchr(char *, int) const char *strchr(const char *, int) の2つをサポートするべき。gccトリックによってCでこれを実現したよ。 ・C++ 201x support デストラクタを呼ばない quick_exit() とそれ用のat_exit()の変種、at_quick_exit()が追加されたので実装した

  • L'eclat des jours(2008-04-09)

    _ Ruby Way 翔泳社さんに献していただきました。 Ruby Way 第2版 (Professional Ruby Series)(Hal Fulton) ハルフルトンのRuby Wayの第2版です。網羅的で、確かに決定版のひとつかな。 イディオムあたりを含めて、最初にRubyってこんな言語というのを説明したあとに、怒涛のように、文字列、正規表現、国際化、数値計算、……IO、動的機能、スレッド、……テスト、デバッグ、パッケージ化(RubyGemとかRDocとかRubyForgeとか)、ネットワーク、Webあたり、dRubyととにかくいろいろまとまっているので、便利かな。印象としては、プログラミングWindowsという感じ。Advanced Windowsではなくて。つまり、リクターではなくペトゾルド。つまり、手元に一冊、職場に一冊、どちらかというと仕事プログラミング用、という感じか

    mitsuki_engawa
    mitsuki_engawa 2008/04/09
    わらた/8バイトまではサイズ的にもPUSHの方が有利(なはず)なので確かに謎い。
  • 「 *s 」と「 s[] 」の違い - IT戦記

    沖林さんがんばれ! なんか、かわいそうになってきた><がんばってください! C/C++のポインタの機能--配列との関係 - builder by ZDNet Japan ところで 僕はちゃんと説明できるかな>< 少しでも言葉や概念が変だったら教えてください>< *s char *s = "hoge"; コードがロードされたときに文字列もメモリにロードされて、実行時にスタックにポインタ変数ができて文字列を指す。 文字列がロードされたメモリのページ(?)には、書き込み権限が付加されないので文字列の内容を書き換えることはできない。 .cstring str: .ascii "hoge" .text .globl _main _main: pushl $str ↑イメージ的にはこんな感じ s[] char s[] = "hoge"; コードがロードされたときに文字列もメモリにロードされ、実行時にス

    「 *s 」と「 s[] 」の違い - IT戦記
    mitsuki_engawa
    mitsuki_engawa 2008/04/04
    ページに書き込みうんぬんは環境の話で、言語としては直接には無関係。DOSみたいなメモリ保護のない環境だと、文字列リテラル書き換えてあれー?みたいなことも・・・。
  • c - *sとs[]の違い : 404 Blog Not Found

    2008年04月04日03:00 カテゴリTips c - *sとs[]の違い これ、結構tricky。 The C Programmming Lanugage K&R 「 *s 」と「 s[] 」の違い - IT戦記 コメント欄にある「K&Rの5.3を読めばわかる」かというと多分わからない。それどころか P. 100 char s[]; and char *s; are equivalent; なんて書いてあるから余計わからなくなると思う。 なのだけど、すっごく簡単な覚え方がある。 答えは sの値を変更できるか 要するに char *s = "pointer"; printf("%s\n", ++s); はOKだけど、 char s[] = "array"; printf("%s\n", ++s); はNGということ。GCCなら error: wrong type argument to

    c - *sとs[]の違い : 404 Blog Not Found
    mitsuki_engawa
    mitsuki_engawa 2008/04/04
    これは知らなんだ。手元のコンパイラだと「左辺値じゃない」って怒られた。
  • C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan

    ポインタとは ポインタはC/C++言語の特徴的な機能のひとつである。ポインタ(pointer)を直訳すると「指し示すもの」であり、別の変数や文字列定数の場所を指し示すために使う。また、ポインタを指すポインタ(ポインタへのポインタ)というものも存在する。 このページをお読みいただいている読者にあっては、「C言語 ポインタ」「C++ ポインタ」などのキーワードでWeb検索をしたことがあるかもしれない。そうするとポインタに特化した内容の書籍をいくつか見つけられる。それだけ奥が深い機能ということである。 ポインタの用途 では、ポインタはどんなところで使われているのだろう。C/C++言語では、あらかじめ定義されている関数が多数存在するが、その一覧には、*(アスタリスクあるいはアステリスク)が付いているものをよく見かける。 これらはポインタを表し、主に文字列の操作やファイルをはじめとするデータの入出力

    C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan
    mitsuki_engawa
    mitsuki_engawa 2008/03/31
    ふいた。
  • Intel C /Fortran Compiler for Linux 10.0登場 | エンタープライズ | マイコミジャーナル

    Intelは25日(米国時間)、「Intel C++ Compiler for Linux 10.0」および「Intel Fortran Compiler For Linux 10.0」を公開した。Intel C++ CompilerはC/C++コンパイラとデバッガを含んだ開発ツール。Intel 32ビット/64ビットプロセッサにおいて高い性能を発揮することを目的としている。同コンパイルを使うとHyper-Threadingテクノロジの機能を活用できるほか、スレッドアプリケーションのサポート、最適な技術の提供などが実現されている。GCC 3.x/4.xおよびG++と互換性があるため、既存の開発環境と統合しやすいという特徴もある。 Intel C++ Compiler for Linux 10.0では、パフォーマンスの改善、マルチコアへの対応強化、スレッド処理の改善、セキュリティチェック機能

  • 某日記(後期)

    .久しぶりに釣りがしたくなったので MoE アカウントを取り直した。結果的に週末で釣りスキル 71 くらいになった。 .昔は海ヘビの失敗上げで地道に上げるか、地下水路でタゲから逃げ回ってエイ釣って上げるしかなかったような気がするんだが、今は 40 くらいまではタイタンの生簀で簡単に上がるし(これは序盤には良い銭稼ぎにもなる)、そこから先はジェイドの鮫で簡単に上がる。 .半角カナ - SJIS はそのままにしといて EUC-JP の方だけを修正すれば、特に困ることはないでしょう。 .将来的に困るとすれば EUC-JP と SJIS の ctype 定義を一つにまとめたい場合ですが、これは単に charmap 導入してキャラクタ名で抽象化しろという話だと思います。 .TODIGIT 不用論 - そういえばそうね。消しちゃっていいのかな。少なくとも NetBSD では参照しているように見えない。

  • 鍋あり谷あり - 左辺値に条件演算

    先日書いた (a<b?a:b)=0 の類。 rubyでもjavascriptでも文法エラーだった。 rubyについてはまあそうかなと思ったんだが、javascriptで通らないのはちょっと意外であった。 よく考えると、あるいはよく考えなくても、なんとなく不自然な式である。 条件式の結果を左辺に書ける言語って、C/C++以外にあるのだろうか。 当然BCPLが有望なわけだが、処理系がない。 朝電車の中で、w-zero3[es]でちろっと書いた記事が、リンク元の記録を見る限り500以上のアクセスを集めてちょっとびっくりした。ブックマークやトラックバックもついてるし*1。 で。 ちょっと解説じみたことを。 (a<b?a:b)=0 だと妖しげだが、 int & smaller( int & a, int & b ) { if (a<b){ return a; } else { return b; }

    鍋あり谷あり - 左辺値に条件演算
  • NAKAMURA Minoru's Diary (2007年4月)

    2002 | 10 | 11 | 12 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1

    mitsuki_engawa
    mitsuki_engawa 2007/04/05
    ポインタアクセスに関する最適化のいろいろ
  • リアルモード用アセンブラ - Plan9日記

    以前,ブート部分がどうなっているのか気になったので,ソースコードを眺めてみたら,アセンブリが全部プリプロセッサのマクロで書かれていて驚いた.というのも,Plan9のアセンブラ(8a)はリアルモード,16ビットのコードを吐けないからだ. /sys/src/boot/pc/x16.hに定義がある.例えば,簡単なところだと,NOPは #define NOP BYTE $0x90という具合に. 何だかなぁと思っていたら,今日,リアルモード用のアセンブラを公開したという投稿があった. /n/sources/contrib/quanstro/realmode.tbz (追記: 2007-03-23) あろはさんが「当にプリプロセッサでアセンブラ書いてるとは」でmbr.sの実例を挙げて書かれているので,興味のある人はそちらへ〜

    リアルモード用アセンブラ - Plan9日記
    mitsuki_engawa
    mitsuki_engawa 2007/03/24
    これがほんとのマクロアセンブラ(ぉ
  • 更新履歴兼雑記:プログラム言語 C

    よく考えてみると C ってあんまり勉強したことがない初心者なので、 K&R を読んで勉強してみました。 わかったことは、 # とか valid な C コードなんだなーとか。 あとやっぱり C の型宣言難しいですね。 int (*f(int argc, char* argv[]))(int argc, char* argv[]), (main); この main の型わかりますか、とか。まぁ int なんだけど。 typedef int (*mainf)(int argc, char* argv[]); mainf f(int argc, char* argv), main; これだと当然 int (*)(int argc, char* argv[]) だよなーという。つまり学んだことは最初の型 (なんか K&R の巻末の BNF もどきでは type-specifiers) 以外はホント

    更新履歴兼雑記:プログラム言語 C
    mitsuki_engawa
    mitsuki_engawa 2007/03/22
    typedefと関数ポインタ。
  • 2007-03-21

    絵としてはもんじゃっぽくないです。味はソースの味しかしませんでした。 ふつーにわかってしまったため話題にしそびれた私はきっと負け組。 それで思ったのですが、Cの強みとして、この記述が何を表してるんだ?って解説だけで1エントリ作れてしまうのがあるよなあ。同じ密度の高く読み辛い言語でも、自分にしかわからない記号使いまくる数学者の数式風味なハスなんとかと違って、Cの怪奇構文は、きっとまともに設計されてれば来解説の必要すらなかった箇所にありますから……。 で、最悪っぽいのはむしろ、知っているとエントリのネタになったり自慢になったりするので、来負の要素なのに上から見てる現象が起きてることではないかと。(絶望先生ネタ) これから言語作る人は、普及を狙うなら、文句言われながらも知っていることを自慢したくなるような構文仕込んでおくといいと思います。話題にされた方が勝ちに決まってるし。 http://d

    2007-03-21
    mitsuki_engawa
    mitsuki_engawa 2007/03/21
    型宣言いじめ。
  • netswitch! | RubyInlineがすごい

    Posted by nanki Mon, 12 Mar 2007 05:14:00 GMT Rubyコード中にCのコードを埋め込めるRubyInlineを使って、 ボトルネックとなっているメソッドを置き換える。 # rubyinline.rb def benchmark s = "a" * 10000 test = Test.new t = Time.now 1000.times{test.string_xor(s, s)} Time.now - t end class Test def string_xor(str1, str2) result = str1.clone str1.length.times do |i| result[i] ^= str2[i] end result end end b1 = benchmark begin require 'inline' class T

    mitsuki_engawa
    mitsuki_engawa 2007/03/13
    ほへー。
  • float vs. double

    唐突ですが, 下記のコードを実行したとき速いのはどちらでしょう. また演算結果はどうなると予想されますか. double calcd(int n) { double ret = 0; for (int i = 1; i < n; i++) { ret += 1 / double(i); } return ret; } float calcf(int n) { float ret = 0; for (int i = 1; i < n; i++) { ret += 1 / float(i); } return ret; } int main() { printf("calcf=%.15f\n", calcf(100000000)); printf("calcd=%.15f\n", calcd(100000000)); } float型は遅い? いえ

    mitsuki_engawa
    mitsuki_engawa 2007/02/17
    精度と速度のいろいろ。
  • memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話

    Cのソースコードに m = 195; とか n = 0xffffffff; とか書いたときの定数(右辺)の型って、なんであるかご存じでしょうか? また、C90(1990年版のISO C言語規格)とC99(1999年版のそれ)ではその型が微妙に異なったりすることがあるんですが、ご存じでしょうか? さらには、お使いのマシンがILP32であるかLP64であるかLLP64であるかによっても、微妙に型が違ってきたりするんですが、それについてはどうでしょうか? えーもちろん、普段は「Uがついてなかったらint, Uがついてたらunsigned intジャネーノ?」くらいの理解でも殆ど不自由しないわけですが、詳細な理解がないとハマるケースも稀にあります。 私はというと、上に書いたような事は、C90/99の差違を除いてはだいたい理解しているつもりだったのですが、C90/99の差異について無頓着だったがため

    memologue - C/C++の定数の型の話, C90/C99の差分のびみょーな話
    mitsuki_engawa
    mitsuki_engawa 2007/02/04
    げろげろ