タグ

cに関するryochackのブックマーク (30)

  • 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の仕様
    ryochack
    ryochack 2014/02/06
  • プリプロセス指令

    C のソース コードは、最初に「プリプロセス (前処理)」と呼ばれるフェーズで処理されます。以下ではすべてのプリプロセス用の指令 (ディレクティブ) について説明します。 #define name [value] 識別子 name を value にマクロ定義します。それ以降に出現する name は、すべて value に置き換えられます。name に ( ) で囲んでパラメータを付けることもできます (マクロ関数)。マクロ定義は #undef で解消できます。

  • プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!

    僕がプログラミングに触れた当時は、プログラミングといえば「まず C 言語」でした。それから 10 年以上が経ちました。学校の授業や企業の研修では未だに C 言語を教えているところがあるようです。関数型プログラミング言語という波が来ている 2012 年にもなって未だに C 言語をやっているというのはまるで進歩が無く残念な気もしますが、比較的多くのプログラマに浸透している共通言語を最初に教えるというのは、一方では喜ばしい事だと解釈する事もできるのかもしれません*1。まぁとにかく、意にせよ不意にせよ現場で プログラム初心者に C 言語を教える羽目になった 人がたくさんいて、プログラム初心者なのに C 言語を学ばざるを得なくなった 若者がたくさんいるということです。 C 言語を教えるときに避けて通れないのがポインタで、プログラム初心者が C 言語を学ぶときにやたらとつまずく人が多いのがポインタ

    プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!
    ryochack
    ryochack 2013/10/13
    メモリ空間がイメージできた瞬間、ポインタが理解できた記憶がある
  • 今、Cで開発するためのスタンダードを知るための本 - L'eclat des jours(2013-09-30)

    _ 今、Cで開発するためのスタンダードを知るための 例によってアスキーの鈴木さんから、をもらった。花井さんのモダンC言語プログラミングだ。なお、似たような題の洋書があって、しかも花井さんは翻訳もするので、そのの翻訳書と勘違いされる可能性もありそうだが、完全にオリジナルだ。 Cは、Unixと共に(というか少し遅れて)生まれたということは、すでに40年以上の歴史があり、それだけの年月がたてば、COBOLなどと同じく老害言語と言われてもこれっぽっちもおかしくはない。 ところが、COBOLと異なり開発者市場がどんどん先細り(あるいは固定化)されるということはなく、むしろ増えている。それどころか最近の調査では最も利用されている(TIOBE 2013)。 一方、C++が先鞭をつけたビジネスプログラミングへのオブジェクト指向プログラミングの適用は、Java、Objective-C、C#と種類を増や

    ryochack
    ryochack 2013/10/04
  • GitHub - siu/minunit: Minimal unit testing framework for C

    ryochack
    ryochack 2013/10/03
    ヘッダファイル1つのテスティングフレームワーク
  • デニス・リッチーによって書かれた最初のCコンパイラーがGitHubで公開

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

    ryochack
    ryochack 2013/05/25
  • Linux KernelのLinked Listの実装が面白い件 - 愛と勇気と缶ビール

    最近、Robert Love先生のを暇な時にダラーと読んでいたりするわけですが、それの中にLinux Kernel内部で使われているLinked Listの実装が書いてあって面白かったので共有。 まず、Linked Listの一個一個のエントリを表すstructを定義します。 struct list_head { struct list_head *next, *prev; }; いやいやいやいや。いかにC力の低い僕でも流石にこれはあきません。騙されませんよ。前後のエントリへのポインタは確かにあるけれども、これにはデータを指すためのポインタがないじゃないの。おじいちゃんまたデータ忘れてきちゃったの?いやあねえ。 おじいちゃんは言った。「それはお前の短見というものじゃ。このLinked Listは以下のコードのようにデータ構造に埋め込んで使うものなんじゃよ。」そしてそれは正しかった。 st

    Linux KernelのLinked Listの実装が面白い件 - 愛と勇気と缶ビール
    ryochack
    ryochack 2013/03/05
    面白い実装。だけど、このメリットはなんだろう?
  • restrictキーワード - yohhoyの日記

    C99で追加された restrict キーワードについてのメモ。 コンパイラに対して「aliasが存在しないと仮定した最適化を許す」と伝えるためのキーワード。C99以降でのみ有効なキーワードであり、C++11現在でもC++には同キーワードが存在しない。(ただしコンパイラの独自拡張として、C++言語でもrestirctキーワードを使えるケースはある。) 要約: 構文的にはconstやvolatileキーワードと同列で、ポインタ型に対してのみ型修飾を行える。int * restrictなど。restrict intやint restrict *はill-formed*1。 コンパイラでの最適化を助けるためのもの。restrictキーワードを削除してもプログラムの意味は変化しない。 用法と意味 restrictキーワードの用法は、C標準ライブラリmemcpy関数/memmove関数における動作仕

    restrictキーワード - yohhoyの日記
    ryochack
    ryochack 2013/02/18
    restrictについて
  • プログラミング言語 C の新機能

    7. 文法一般 この章では C 言語に新たに加えられた指示付きの初期化子や複合リテラルといった文法や、暗黙時の宣言に関する変更といった、変更された文法について説明します。 7.1 暗黙の関数宣言 現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。 7.2 宣言時の暗黙の型 手続き型言語では、一般的に変数や関数などを宣言して使用する必要があります。もちろん C 言語も例外ではありません。しかし C 言語では特に型

    ryochack
    ryochack 2013/02/05
    restrict修飾子は別名のポインタが同じアドレスを指していないことをコンパイラに教える
  • C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター

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

    C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター