タグ

Cに関するtroronのブックマーク (31)

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • インフラ部門で働くCプログラマの話

    Webシステムの開発にはAPIドキュメント作成が必ず付いてきます。システム改修が加えられてもAPIドキュメントが古いままで更新されてなかったり(更新し忘れていたり)した経験はありませんか?ドキュメントの更新を忘れがちな方のために、ソースコード上でAPIドキュメントも管理できるドキュメンテーションツール『Swagger』についてお話しいたします。

    インフラ部門で働くCプログラマの話
  • 2016年、C言語はどう書くべきか (後編) | POSTD

    (前編はこちら: 2016年、C言語はどう書くべきか (前編) ) (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) システム依存の型 まだ「32 bitのプラットフォームでは32 bitのlong型、64 bitのプラットフォームでは64 bitのlong型がいい」という不満があるようですね。 プラットフォームに依存する2つの異なるサイズを使うため、 故意に コードを難しくすることを考えたくなければ、システム依存の型のために long を使おうとは思わないでしょう。 この状況では、プラットフォームのためにポインタ値を保持する整数型、 intptr_t を使うべきです。 モダン32-bitプラットフォームでは、 intptr_t は int32_t です。 モダン64-bitプラットフォームでは、 intptr_t は int64_t です。 int

    2016年、C言語はどう書くべきか (後編) | POSTD
    troron
    troron 2016/02/21
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
    troron
    troron 2016/02/18
  • C言語で可変長引数をとる関数を、型安全に書く方法

    C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a

    troron
    troron 2014/12/13
  • Big Sky :: clib の使い勝手にマジ感動した

    C言語でアプリケーションを書くのは他の言語と比べて少し気合が必要ですよね。例えば HTTPからデータを取得する 取得したデータを json パースする 結果の一部を色付きで表示する こんな場合、C言語プログラマは 「HTTP か、じゃぁcurlかな」 「JSON か、parson かな」 「色表示か...エスケープシーケンスでもいいけどWindowsがなー...」 といった事を考え、そこから curl や parson といった資材の調達を始める事になります。途中で新しい機能を追加したくなり、それを外部ライブラリに頼る場合だとその都度資材を調達する必要があり、思考を停止しなければなりません。 この辺は rubyperl、nodejs、golang 等の様に、ちょっとした手間だけで済ませたい物です。 またC言語の場合、ヘッダファイルはシステムの include フォルダに提供元が期待す

    Big Sky :: clib の使い勝手にマジ感動した
  • GCC some extensions

    gcc(Gnu C Compiler)の拡張文法 [警告!] C/C++言語初心者はこのページを読まないでください。 このページではgcc独自のC/C++拡張文法について解説します。 これらの拡張文法が可能にする機構は確かに便利なのですが、 もちろんANSI規格に従っていないので、一般的には使うべきではありません。 C/C++言語文法を学び始めている初心者はこれらgcc拡張文法を 知るべきではありません。C/C++言語を正しく理解する上で大きな 支障となります。 C/C++言語を十分に熟知した者は、gccがこのようなこともすることを 「雑談」として知っておくと楽しいかもしれません。もちろん 実戦に使うべきではありませんが。しかし初心者が偶然に、これらの 機能を使ってうまくいく場合がありますので、そのような初心者を 見つけたら、それが標準規格ではないことを注意してください。 配列変数をコピー

    troron
    troron 2014/02/24
  • ロベールのC++教室 - 第7章 代入文のリサイクル -

    前回言った通り、宣言文とブロック文以外の文は「式にセミコロンをつけたもの」です。では、代入文はどうなのでしょうか? 代入文を式として利用した場合どうなるのでしょうか? 今回は、その代入文についてのお話です。 では、今回の要点です。 代入式は、代入される変数の代わりに使える。 代入式の値は代入演算された後の値になる。 後置インクリメントは特殊で、代入演算はできず、1増える前の値が使われる。 では、いってみましょう。 先ず、代入文を式にセミコロンをつけたものと考えます。この式を代入式と呼びましょう。例えば、i = 0; の場合は i = 0 が代入式となります。 この代入式は普通の式と同じように使えるのでしょうか? そして、使えるとすればどのようになるのでしょうか? では、代入式を普通の式と同じように使ってみましょう。優先順位が気になるので、代入文はカッコで囲んでおきましょう。 // Assi

    troron
    troron 2014/01/17
  • ロベールのC++教室 - 第6章 コンマ演算子 -

    今まで、いろいろな演算子について話してきました。今回は一風変わった演算子について話してみようと思います。 では、今回の要点です。 <式1>, <式2> の値は <式2> になる。 コンマ演算子は優先順位が異常に低い。 コンマ演算子を使えば複文を単文にできる。 では、いってみましょう。 前回のプログラムの for 文をもう一度見てみましょう。 for(i = 0; i < 8; i++) { if(fscanf(pf1, "%d", &num1) == EOF || fscanf(pf2, "%d", &num2) == EOF) { fputc('\n', pf3); goto LAST; } fprintf(pf3, "%d ", num1 + num2); nNumbers++; } 最後に nNumbers++; というのがありますね。しかしこれ、感覚的には for 文の i++ の

    troron
    troron 2014/01/17
  • 増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby|CodeIQ MAGAZINE

    増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby 2013.12.12 Category:CodeIQ問題解説・リーダーボード Tag:C ,masuidrive ,mruby ,Ruby 増井雄一郎さんから初の問題!「数十時間悩んだあげく1行で直るコード」の解説記事です。 この問題は、実際に増井雄一郎さんとまつもとゆきひろさんのお二人が数十時間悩んだ結果解決した経験が元になっています。 あなたはこの問題解けましたか? by CodeIQ運営事務局 増井雄一郎です。 初のCodeIQへの出題でかなり緊張しましたが、想定より多くの方に答えていただき、驚きと喜びで一杯です。 出題後、問題文に”1行”と書いたことで混乱させてしまったかもしれないと不安になりましたが、解答を見ているとあまり問題ではなかったようで安心しました。 問題文

    増井雄一郎(@masuidrive)さんの「数十時間悩んだあげく1行で直るコード」問題解説記事 #c #mruby|CodeIQ MAGAZINE
    troron
    troron 2013/12/14
  • C言語ケーススタディ Excelで作ったデータ(CSVファイル)の読み込みプログラム2

    2014年10月より個人の方を対象に、Study C無料提供を開始しました。 C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。 大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。 インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。 また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。 Study C無料利用についての詳細は、このページを参照してください。 "..."形式のデータを作成するために、前回のExcelデータの次の行に下記の3個のデータを追加します。 1番目 " 2番目 , 3番目 ", データに

    troron
    troron 2013/03/29
  • C/C++あれこれ/Excel仕様のCSVファイルの読み込みと表示 - 笑猫酒家

    #include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; #include "CSVReader.h" int main(void) { std::fstream r("c:\\okinawa.csv", std::ios::in); if( !r.is_open() ) { cerr << "Open Error! :" << endl; return -1; } CSVReader csv(r); vector<string> tokens; while( !csv.Read(tokens) ) { for( unsigned int i=0; i<tokens.size(); i++ ) { cout << "[" << tokens[i].c_str

    troron
    troron 2013/03/29
  • UNIXでTCP/IPを使う

    UNIXでTCP/IPを使う ロボットのプロセッサユニットRPU-100は、NetBSDが動作しているので、ネットワーク通信を行うプログラムを作るためには、Unixソケットライブラリを使う必要がある。ここでは、Unixで動作するプログラムで、どのようにソケットライブラリを使うのかを、簡単に説明する。 ☆☆実際のコードは、ロボットデーモン1号とロボットデーモン2号に含まれている☆☆ 1. UDPによる通信 最初に作ったロボットデーモン1号プログラムは、Windows側で動作するコックピット1型プログラムから、いくつかのコマンドとジョイスティックデータをUDPデータグラムの形で受信する。そのため、プログラムはUDPの受信機能を備えている。 1.1 受信の準備 ロボットデーモンプログラムは、Windows側のプログラムからのデータを待ち受け、受信データを解釈してロボットを動作させるという処理

    troron
    troron 2012/12/13
  • posix-extended regular expression syntax (GNU Findutils 4.9.0)

  • http://www.tuxation.com/setuid-on-shell-scripts.html

  • setuid なスクリプト

    シェルやPerlで書かれたスクリプトも、setuidプログラムのように動作して欲しいときがある。その場合にどうすればいいか、という話(セキュリティの問題があるため仕事ではほとんど役に立たない、教養レベルの話)。 いろいろと方法があるだろうけれど、ここではそのうちの2つ記録しておく。 その1. setuid(0)とsystem()を用いたラッパープログラムsetuid on shell scripts に書いてあるとおり、シェルやPerl等のスクリプトファイルの場合は、setuidビットをセットして実行しても無視される。そこで、ラッパーとしてELFの実行ファイルをC言語で作成してsetuidビットをセットするのだが、その内部でただ単にsystem(…)関数でスクリプトを実行するだけでは足りない。system(…)の前に、setuid(0)を実行しないといけない。 … int main() {

  • 婷婷综合久久狠狠色_亚洲国产AⅤ精品一区二区蜜桃_亚洲精品无码专区在线_亚洲欧美精品伊人久久_看黄A大片爽爽爽不打码

    troron
    troron 2012/06/11
  • SSL and TLS

    SSL and TLS: Designing and Building Secure Systems, Addison-Wesley, 2001 ISBN 0-201-61598-3 Previews Table of Contents (PostScript) (ASCII) Sample Chapter: Part of Chapter 9, HTTP over SSL This chapter describes the use of HTTP with SSL. Errata A list of known errors is available here. See here for notes on errata in the the C sample code. Software The ssldump SSL/TLS protocol analyzer used to gen

    troron
    troron 2012/04/07
  • SSL and TLS

    troron
    troron 2012/04/07
  • 仙石浩明の日記: stone に Server Name Indication (TLS 拡張) 機能を実装

    このハンドシェークの後、 クライアントが暗号化された http リクエストを送信し、 それを受けてサーバが暗号化されたレスポンスを返す。 https サーバがバーチャルドメイン機能を持つには、 https サーバがサーバ証明書を送信する (上のハンドシェーク図の 3行目) より前に、 クライアントがリクエストしたいホスト名を通知する必要がある。 上図から明らかなように、 ホスト名の通知は一番最初の「ClientHello」で行なわれなければならず、 そのための拡張が、 「Server Name Indication」というわけである。 もちろんこの時点では、まだ鍵の交換は行なわれていないので、 ホスト名は平文で送られる。 前置きが長くなってしまったが、 この Server Name Indication (SNI) を stone でサポートしてみた (stone.c Revision 2