タグ

C言語に関するatsushifxのブックマーク (16)

  • C言語1000行以下で開発されたエディタ「Kilo」

    このほど、「antirez / kilo|GitHub」において、Salvatore Sanfilippo氏によってC言語を使い1000行以下のソースコードで開発されたエディタ「Kilo」が公開された。2条項BSDライセンスの下でオープンソース・ソフトウェアとして公開されている。ほかのライブラリに依存することなく開発されており、作業を始めてから数時間ほどで開発されたと説明がある。C言語による学習素材やエディタ開発のベースソースコードとして利用できる。 Kiloはclocを使ったカウントでコメントや空行を除いた行数が956行とされており、1000行を下回っている。開発にはcursesライブラリといった基的なライブラリも使われておらず、VT100の基的なエスケープシーケンスを使って開発されている。エディタにおける保存や終了といった操作には次のキーが割り当てられている。 Ctrl-S 保存

    C言語1000行以下で開発されたエディタ「Kilo」
    atsushifx
    atsushifx 2016/07/20
    CURSESもなしというのは凄いな。検索などの基本機能にもよるが、勉強用には丁度よさそう
  • Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱

    二十五日半狂乱、6日目(の分...orz)の記事 Cのエラーハンドリングを毎回やるのは面倒だ! 前回も言ったが、Cではエラーハンドリングに戻り値とerrnoを用いる. それはそうと例外設計において"無視"は大罪である. だから、関数を呼び出したら戻り値は漏らさずチェックすべきだ. ということで、例えば以下のように逐一戻り値をチェックする. if(send(sockfd, buf, len, 0) < 0){ ERROR("send"); exit(1); } あぁ、面倒だ. 一体コードのどの部分が正常系の処理なのか? ほとんどエラーハンドリング*1で埋め尽くされるじゃないか. そもそもエラーハンドリング部分に書くのは毎回同じコードだし、コードの繰り返しは防ぎたい. エラー処理部分をラッピングして楽をする unpv12eの中でラッパーを被せることによってこの面倒を回避する方法を知った. in

    Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱
    atsushifx
    atsushifx 2014/11/01
    一応Cにもsetjmp/longjmpマクロはあるが、使えるものではないしな。そもそもコーディングの大部分は引数のチェック、やりたい処理の準備と後始末、エラー処理がしめる。正解自体まだなさそう
  • C言語における暗黙の型変換とAPI設計 - もなもなもなかのページ

    #include <stdio.h> #include <stdlib.h> int main(void) { int a = 65535; char b; b = a; printf("%d %d\n", a, b); return EXIT_SUCCESS; } 「a に 65535 を代入し,b に a の値を代入しているのだから,b も 65535 になるはず.」 などとLL言語(JavaScriptRuby など)に慣れていると思ってしまいがちだが,そうはならない. なぜなら,一般に,char 型の変数が保持できる値の範囲は,int 型の変数が保持できる値の範囲よりも小さいから. 概ね(…とボカす理由は後述),char は -128 から 127 までの整数しか保存できない. この性質は,ときどき,極めて恐ろしい. C言語は,上の例のように保持できる値の範囲が小さい変数への

    atsushifx
    atsushifx 2014/03/19
    C言語=高級アセンブラ。もともとUNIXを作るときの言語だったし、移植性はそのときでは高かった。C++がC言語の次を担えなかったのは残念だけど、現状をみるとC以外の選択肢がいろいろでてきたのが楽しみ
  • ImperialViolet - Apple's SSL/TLS bug

    Yesterday, Apple pushed a rather spooky security update for iOS that suggested that something was horribly wrong with SSL/TLS in iOS but gave no details. Since the answer is at the top of the Hacker News thread, I guess the cat's out of the bag already and we're into the misinformation-quashing stage now. So here's the Apple bug: static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bo

    atsushifx
    atsushifx 2014/02/24
    そのままクソコードに入るな。TogetterではC言語じゃなくC++にしろといっていたが、これはTDDやリファクタリングをきっちりしろという問題
  • iOSのSSL周りのバグに見るC言語におけるエラーハンドリングが糞だという話

    Steve Streza 🏳️‍🌈 @SteveStreza Update your iPhones/iPads now. The SSL bug is really bad. Always brace your if statements. https://t.co/eyeDvhwAV9 http://t.co/lEgUdqZChu 2014-02-23 01:33:58

    iOSのSSL周りのバグに見るC言語におけるエラーハンドリングが糞だという話
    atsushifx
    atsushifx 2014/02/24
    バグがC言語の記述性能の低さが要因のひとつというのは同意だが、だからC++というのも違う気がする。C++も黒魔術過ぎるのでLLVM+使いやすい言語が好み
  • Steve Streza 🏳️‍🌈 on Twitter: "Update your iPhones/iPads now. The SSL bug is really bad. Always brace your if statements. https://t.co/eyeDvhwAV9 http://t.co/lEgUdqZChu"

    atsushifx
    atsushifx 2014/02/24
    バグもひどいけど、コード自体がひどい。http://togetter.com/li/633592 ではC++にしろといっていたけど、まずはリーダブルコードとリファクタリングを読めといいたい
  • カーネルおさんぽまっぷ超入門

    Kernel/VM Advent Calender 2013 7日目 カーネル/VMはておくれなすごい人がけっこう集って、ネタとか披露しているようです. 今年のAdvent Calenderも既に濃い内容が集っています. でも、私達パンピーにはカーネルとかちょっと難しすぎてそもそも カーネル/VMという主題自体敬遠しちゃう…… ということで当にカーネルの第一歩をやってみよう、というのがこの記事です. 記事タイトルはえりっく氏(@siritori)から無断で肖ってます.ありがとうございます 今年の他の記事が高度な内容なので この記事が低レベル(低レイヤということでなく当に程度が低いという意味で)ですいません. 普段からカーネル/VMに参加してる皆様、さようなら. カーネル/VM界隈わいわいしてておもしろそうだけど怖くて敬遠してる方々、こんにちは. 前置きはこのぐらいで文行きます. 少々

    カーネルおさんぽまっぷ超入門
    atsushifx
    atsushifx 2013/12/10
    いい感じに初心者向き。こういったコマンドのソースからUNIXの勉強というのはよいアプローチだと思う
  • 静的解析に引っかからなかったメモリ破壊の話 - Qiita

    リセットされるカウンタは g_loop_counter です。 いったい何がいけないのか、わかりますか? mapファイルで確認すると、g_loop_counter は g_is_error_flg の次のアドレスでした。 ステップ実行して g_is_error_flg = false; で g_loop_counter に 0 が書き込まれるのを確認できました。 ただ、g_is_error_flg = false; の何がいけないのか、しばらくは分かりませんでした。 mogemoge.c から見ると、g_is_error_flg の宣言はどっか別の所にあって、mogemoge.c 内では unsigned int として扱うしかない訳です。 ところが、アドレスの割り付けとしてはg_is_error_flg と g_loop_counter で1バイトずつでしか割り当てられていない訳で。 困

    静的解析に引っかからなかったメモリ破壊の話 - Qiita
    atsushifx
    atsushifx 2013/12/01
    教科書的にはグローバル変数を使うな、staticにして.cファイルでアクセサを定義しろ、というOOPの導入が一番いい。そうでないなら変数宣言をヘッダファイルにまとめて、#define GLOBALをつかうのが昔からあるテクニック
  • テストフレームワークのほうのUnityでC言語でもTDDを試す - Bye Bye Moore

    奥さん、僕ぁC言語でもTDDしたいんですよ! ……というわけで、Rubyで実現する素敵なC言語TDD環境、Unityです。 3Dゲームを作るアレではなく、TDD用テストフレームワークです。 UnityRubyistにはお馴染みのRackを使っています。 Ruby&Rack環境が方は先に導入しておいて下さい。 導入が終わりましたら、 "公式様"にとんで頂き、 下の方にある「download unity」から圧縮ファイルを入手します。 これを解凍すると色々と並んでいます……が 今回用があるのはexampleです。 これの中身を詳しく見て行くと $ ls examples/ helper rakefile_helper.rb test makefile readme.txt test1.out rakefile.rb src test2.outとなっています。 テスト対象のファイルはsrc、

    テストフレームワークのほうのUnityでC言語でもTDDを試す - Bye Bye Moore
    atsushifx
    atsushifx 2013/11/02
    名前がバッティングしているのはよくないな。知名度が低いほうが負けるし話が通じなくなる。公式サイトによるとCMockと組み合わせて組み込み用Cでも使えるといっているのは期待できる
  • 今、Cで開発するためのスタンダードを知るための本 - L'eclat des jours(2013-09-30)

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

    atsushifx
    atsushifx 2013/10/01
    アジャイルやOPP、DevOpsなどの知見を取り込んだモダンなC言語プログラミングの本、読みたくてたまらん。namespaceとかをどう実現しているかが気になるな
  • while(1)のループとその除去について〜FizzBuzz問題を例に - わさっきhb

    いきなりですが問題です. 3つの正整数a,b,cを入力にとり,1からaまでを1ずつ順に出力しなさい.ただし,bで割り切れる場合は「Fizz」を,cで割り切れる場合は「Buzz」を,両者で割り切れる場合は「Fizz Buzz」を,該当する数の代わりに出力すること. FizzBuzz問題(wikipedia:Fizz_Buzz)では,bとcの代わりに3と5が使われますが,ここでは変数としておきました. さっそくですが解答として,ある学生が,以下のようにプログラムを書いたら,どのようにアドバイスしましょうか. #include <stdio.h> int main(void) { int a, b, c; int number = 1; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); while(1) { if (number % b ==

    while(1)のループとその除去について〜FizzBuzz問題を例に - わさっきhb
    atsushifx
    atsushifx 2013/09/03
    FizzBuzzの解答例。普通は最初のようなwhile(1)は書かないとおもうけどReadble Codeの例としてよい感じ。自分はscanfにプロンプト文を付けて、FizzBuzzの"i % b == 0"にカッコをつけるかな
  • 組み込みソフトウェアのTDDってなんだろーかね

    ファームウェアをつくる仕事になりまして。アップデートのできない前提とすると、きちんと抜けなく確かめないとじゃないですか。趣味でコードを書くことはあっても、仕事ではなかったし、自分しか見ないしで、テストとかほとんど何も考えてなかったので、この機会に勉強することにしました。自分が忘れないように書いておきます。 参考にした資料 Getting Started with TDD for Microchip’s PICs O'Reilly Japan - テスト駆動開発による組み込みプログラミング Web系やIT系のかたがただと実践した記録が勉強会で出てきてるけど、マイコン開発だとなかなか見つからなくて。上記の書籍とサイトを参考に、自分の環境を整えました。上記サイトは幸いにもPIC向け開発のものだったのですが、32ビットPICだと若干見直さないといけない箇所があり苦労しました。そういうところはオライ

    atsushifx
    atsushifx 2013/06/14
    [I/O][programming][組み込みプログラミン]TDDはBugを減らしたりコードの質を上げるための開発手法なので全然問題なし。とくに同じテストを繰り返してやれる安心感がすごい。I/Oやレジスタは外部インタフェースとして考えて振る舞いのテストを加えるのがよさそう
  • デニス・リッチーによって書かれた最初のCコンパイラーがGitHubで公開

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

    atsushifx
    atsushifx 2013/05/23
    ここからC99まで発展したし、現在も現役の言語だしすごいよな。無論、そこまでにはいろいろとC言語自体が改善されたこともある
  • 書評 テスト駆動開発による組み込みプログラミング

    今月発売になった「テスト駆動開発による組み込みプログラミング C言語とオブジェクト指向で学ぶアジャイルな設計」を監訳者の蛸島さんより頂戴したのでご紹介します。 原著者は、ジェームズ・グレニング氏で、アジャイルマニフェストの創始者の一人で、主に組み込みの分野を得意としているアジャイルコーチです。 昨年のAgile 2012にてオージス総研さんが突撃インタビューした記事が以下に公開されていますので、こちらを読むとどんな方なのかよく分かると思います! http://www.ogis-ri.co.jp/otc/hiroba/specials/JamesGrenning/interview1/ の方は、タイトルに「組み込み」とついていますが、組み込みじゃない方にも是非お勧めしたい内容になっています。 以下がこのの目次ですが、純粋に組み込みに特化しているところは5章くらいです。 そして、個人的にい

    書評 テスト駆動開発による組み込みプログラミング
  • エンジニアにコミュニケーション能力を求める愚行。 : ひろゆき@オープンSNS

    【教えてくん】コミュニティーなのです。 なんかニュースとかあったらここに書こうかと思ってますよ。とりあえず、おいらのブログ エンジニアにコミュニケーション能力を求める愚行。 : ひろゆき@オープンSNS ひろゆき@オープンSNS (ひろゆき@オープンSNS) 投稿者, @ 2012-09-11 19:59:00 エンジニアにコミュニケーション能力を求める愚行。 優れたエンジニアには集中力が必要です。 んで、集中力は言い換えると、鈍感力だったりします。 集中する対象以外には、注意を払わないってことですね。 集中してプログラムをしてる状態を理解したい人は、 頭の中に8×8のマスを書いて、1人でオセロをやってみてください。 中盤ぐらいに、白と黒が大きく入れ替わったときに話しかけられても、 シカトぶっこいで頭の中でオセロを続けられる人が エンジニアとしての適正が高い集中力のある人です。 そこで、「

    atsushifx
    atsushifx 2012/09/11
    元ネタに反応するが、C言語でコンカレント実行のためのライブラリを書いてましたとか、Android用にLLVMを移植してましたとか言っておけばいいんでかね。十分に技術の説明になるはずですが
  • Bitbucket

  • 1