タグ

programmingとcに関するrydotのブックマーク (30)

  • C++ における整数型の怪と "移植性のある" オーバーフローチェッカー (第1回 : 整数型の怪と対策の不足) - Qiita

    はじめに 整数型の取り扱い (表現可能な値の範囲を超える "整数オーバーフロー" を防ぐなど) は、セキュリティ上の問題を避けるために、そうでなくとも予期しないバグを避けるために (頻繁に!) 注意しなければならないことだと言えるでしょう。 整数オーバーフローは、特に C/C++ においては深刻な脆弱性の原因になりがちです。昨年界隈を騒がせた Android の Stagefright としてくくられている複数の脆弱性のうち大部分は、この整数オーバーフローが原因となっています。 ただ、C++ における整数型は、実に奇妙です。その奇妙さの結果、C++ において整数オーバーフローを防ぐことは非常に難しいことが……あまり知られていません。というわけで、数回に分けて C++ における整数型 (特に符号付き整数型) の仕様とその奇妙なところ、何故整数オーバーフローチェックが難しいのか、それでもどうや

    C++ における整数型の怪と "移植性のある" オーバーフローチェッカー (第1回 : 整数型の怪と対策の不足) - Qiita
  • How to C (as of 2016)

    How to C in 2016 This is a draft I wrote in early 2015 and never got around to publishing. Here’s the mostly unpolished version because it wasn’t doing anybody any good sitting in my drafts folder. The simplest change was updating year 2015 to 2016 at publication time. (Update: Many people have submitted revisions, notes, and improvements. All contributions have been incorporated throughout the pa

  • C言語プログラミングの覚え書き(改訳) - アスペ日記

    原文: Notes on Programming in C Rob Pike 1989年2月21日 Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights Reserved. Lucent Public License Version 1.02 前書き KernighanとPlaugerによる“The Elements of Programming Style” (「プログラム書法」木村泉訳)は重要で影響力のあるです。このにはそれだけの価値があります。しかし、その中の簡潔なルールが、来意図されたような哲学の簡潔な表現としてではなく、よいスタイルのレシピとして受け取られているように私は時々感じます。このが変数名は意味を持つようにつけられるべきだと言うなら、名前が使い方を説明するちょっとしたエッセイのような

    C言語プログラミングの覚え書き(改訳) - アスペ日記
  • Webエンジニアが組み込みプログラミングをすることになったときに知っておきたかったC言語の知識 - Qiita

    IoTエンジニアになって半年が過ぎたkazuphです。 (IoTって言葉はいつごろまで使えるんですかね(・∀・)?) PerlRubyでWebアプリケーションを書いていたエンジニアが、C言語でゴリゴリ組み込みプログラミングをすることになったときに、どんなことを知っていたかったかなと思い出しながら書いてみたいと思います。 その辺にある普通のC言語の入門書には載ってない知識が中心です。 ちなみにArduinoの例が多いですが、実際にはほとんどの期間を某チップの某SDKを使って開発しました。 わかる方はそれを想像しながらだと面白いかもしれません(・∀・) 半年の半分はiOSアプリ作っていたので、実質3ヶ月くらいの知識だと思ってください。 間違いの指摘など是非々々お待ちしておりますm(_ _)m こんな記事も書いてます。 IoTやるならまず知っておきたいパーツ屋・オンラインショップ IoTアプリ

    Webエンジニアが組み込みプログラミングをすることになったときに知っておきたかったC言語の知識 - Qiita
  • C言語分かってなかった (I Do Not Know C) - Qiita

    Dmitri Gribenko氏によるBlog記事 "I Do Not Know C" より訳出。原文および訳文のライセンスは CC BY-SA 3.0 に従う。 この記事の目的は、皆に(とくにCプログラマに)「C言語分かってなかった」と言わせることです。 C言語の死角は思っているよりも身近にあり、よくある単純なコードですら 未定義動作(undefined behavior) を含む可能性があると示したいと思います。 記事は質問に対する回答の形をとります。全ての例示コードは別々のファイルに分かれていると考えてください。 (訳注:Qiita/Markdown表現の制約から、読中ネタバレ防止のため文章順序を変更しています。前半には質問のみを、後半には質問と回答の対を訳出しました。) 質問編 1.

    C言語分かってなかった (I Do Not Know C) - Qiita
  • Super Technique 講座~longjmpと例外

    プログラムの流れを制御する手段として、いわゆる「構造化構文(for とか if とか)」、悪名高い「goto 文」などがあるのは周知のことだが、かなり特殊なものとして、「setjmp, longjmp」による「非ローカル分岐」と呼ばれるものがある。この「非ローカル分岐」は「非ローカル」と言うだけあって、ある関数の中から、別な関数に制御を移すことができたりする。まあ、そのために乱用すべきではなく、注意して使わなくてはならないライブラリ関数なのだが、実はこれは JavaC++ で言語の上で実装されている「例外」の基礎となるものである。だから、まずこの標準ライブラリ関数「setjmp, longjmp」について解説しよう。 → Java 講座の「例外」 setjmp, longjmp とは どうやって実現してるの? setjmp/longjmp の利用例~インタプリタ 補追1:setjmp

  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

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

  • ポインタの裏話

    ポインタの裏話 岡﨑 直観 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||

  • 今、Cで開発するためのスタンダードを知るための本 - L'eclat des jours(2013-09-30)

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

  • ヒビノアワ: 変数についてどう説明するのがいいのだろうか

    プログラミングの入門書を読むのが好きです。 プログラミングをまったく知らない人に、どうやって説明するのかというプロセスに興味があるのですね。 で、読んでいるとたいていので変数の説明として「箱」というメタファを出してくるのです。 変数は箱のようなもので、Aという箱に数値を入れてうんぬん......。 たしかに、分かりやすいことは分かりやすいんだけど、C言語のポインタでつまづく人が多いのって、この「箱」の例えが良くないんじゃないかなーと思った。 箱から、メモリのアドレスへと飛躍するのはなかなか難しいのではないでしょうか。 で、そんなことをつらつら考えていて、思いついたのが、変数ってのは「巻物のある場所に名前を書いた付箋を貼る」ことっていう説明の方法。 巻物があると思ってくださいよ。 結構長い巻物。 その頭から、10センチのところに「100」って数字を書いてみる。 で、そこに「A」って名前を書

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

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

  • Cello • High Level C

    #include "Cello.h" int main(int argc, char** argv) { /* Stack objects are created using "$" */ var i0 = $(Int, 5); var i1 = $(Int, 3); var i2 = $(Int, 4); /* Heap objects are created using "new" */ var items = new(Array, Int, i0, i1, i2); /* Collections can be looped over */ foreach (item in items) { print("Object %$ is of type %$\n", item, type_of(item)); } /* Heap objects destructed via Garbage

  • パワーポイントでC言語プログラミング

    どこの会社もそうですが、パワーポイントの資料作るのが得意なエンジニアはたくさんいるのですが、実際にプログラムでコードを作るのが得意なエンジニアはあまりいなくて、当に困ります。

    パワーポイントでC言語プログラミング
    rydot
    rydot 2013/04/18
    なんだこれは。。。
  • jstolarek.com

    This domain may be for sale!

  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
  • Valgrind Home

    Information About News Tool Suite Supported Platforms The Developers Source Code Current Releases Release Archive Variants / Patches Code Repository Valkyrie / GUIs Documentation Table of Contents Quick Start FAQ User Manual Download Manual Research Papers Books Contact Mailing Lists and IRC Bug Reports Feature Requests Contact Summary Commercial Support How to Help Contributing Project Suggestion

  • How to wrap C functions to OCaml

    This document is a small tutorial that introduces how to call C functions from OCaml. Which is usefull if you want to make a mixed C and OCaml application, if you want to call some functions you need from a C library, or to write a complete binding to a C library. Compiling a C/OCaml library Mixing C and OCaml Compile C with OCaml OCaml bindings to C library Contents Quick start Compiling C and OC

  • C言語は今でも価値のある言語か?

    Couchbaseの作者Damien Katz氏は,C言語はバックエンドプログラミングにおいて現在でも優れた言語である,という意見を持っている。しかし他の開発者は,C言語はあまりにも欠陥が多いとしてC++Javaを支持するもの,あるいはいずれも好まないというものなどさまざまだ。 CouchDB の開発者であるDamien Katz氏は,The Unreasonable Effectiveness of C と題した先日のブログ記事において,C言語がバックエンドのための優れた言語であると断言した。氏はC++Java,さらにはErlangやRubyのようなより現代的な言語よりも,今後もC言語を支持していくつもりだという。ただし単純に,C言語を他のどれよりも優れた言語だと言っている訳ではない。"言語自体のパフォーマンスと信頼性が重視される場面においては,C言語に比類する言語は皆無である",別

    C言語は今でも価値のある言語か?
  • 第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

  • SML# - C言語バインディング まとめ (ML/LL AdventCalendar20日目) - ::Eldesh a b = LEFT a | RIGHT b

    この記事は LL/ML Advent Calendar #LLAdventJP 20012/12/20の参加記事です。 出来心でRTした次の瞬間には犠牲に参加することになっていました。なごやこわい。 注意:この記事では SML#1.2.0 を使うものとしています。 SML# にはC言語バインディングをサポートする機構が言語レベルで組み込まれており、簡単にC言語で書かれたライブラリを利用することが出来ます。 しかしまぁ、簡単とは言っても相手はあのC言語ですよ。 現実世界のライブラリをバインドするにはキレイな世界だけで完結するはずも無いのです…。 ここでは、私がまともに使い始めて分かってきたことを含めて、基礎からSML#のC言語バインディングの機能を一通り紹介します。 いきなり例 もう界隈の人にはおなじみかもしれません。最も簡単なバインディングの例です。 # val puts = _impor

    SML# - C言語バインディング まとめ (ML/LL AdventCalendar20日目) - ::Eldesh a b = LEFT a | RIGHT b