タグ

cに関するyoppiblogのブックマーク (25)

  • Const and Optimization in C

    Today there was a question on /r/C_Programming about the effect of C’s const on optimization. Variations of this question have been asked many times over the past two decades. Personally, I blame naming of const. Given this program: void foo(const int *); int bar(void) { int x = 0; int y = 0; for (int i = 0; i < 10; i++) { foo(&x); y += x; // this load not optimized out } return y; } The function

  • Deep C

    Programming is hard. Programming correct C and C++ is particularly hard. Indeed, both in C and certainly in C++, it is uncommon to see a screenful containing only well defined and conforming code.Why do professional programmers write code like this? Because most programmers do not have a deep understanding of the language they are using.While they sometimes know that certain things are undefined o

    Deep C
    yoppiblog
    yoppiblog 2013/10/23
    よい
  • 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の差分のびみょーな話
    yoppiblog
    yoppiblog 2011/12/03
    最近C力おちてきてやばい
  • mraleph

    Disclaimer: This is my personal blog. The views expressed on this page are mine alone and not those of my employer. This post is about JavaScript performance but I would like to start it by telling a story that might seem unrelated to JS. Please bear with me if you don’t like C. A story of a C programmer writing JavaScript Mr. C. is a C programmer as you can probably guess from his name. Today he

    yoppiblog
    yoppiblog 2011/11/06
    こういう低レベルなことも考えてコード書かないとな
  • Designated Initializer - いけむランド

    指示初期化子の話。 Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある件について - TAKESAKOのはてな出張所 指示初期化子というのは構造や配列の一部だけを初期化するように指定できる書き方で C99 で新機能として導入されたもので、今まで (C99 以前) は全部をがっつり初期化するか、宣言後に代入文で必要なメンバだけチマチマと設定していく必要があったものが、宣言文の一文で表現することができるようになった。詳しくは以下のサイトを参考されたい。 7.8 指示付きの初期化子 (Designated Initializer) - プログラミング言語 C の新機能 特に構造体変数の初期化でお世話になることが多そうな機能だが、構造体の構造によっては上手く適用できないことがある。例えば、cygwin では以下のコードがコンパイルで

    Designated Initializer - いけむランド
  • Linux-Mrouted-MiniHOWTO

  • C and the AT&T Unix Port -- A Personal History

    C and the AT&T Unix Port -- A Personal History C言語と AT&T Unix の移植 Porting Unix from the 16-bit PDP-11 to the 32-bit Interdata 8/32 had a profound effect on the C language and the way it was used in Unix. 16 bit の PDP-11 から 32 bit の Interdata 8/32 への移植は C言語とその Unix での使用方法に深い影響を与えました。 Background 背景 I got involved in compilers by a backdoor route -- Dennis Ritchie had written a compiler for a languag

  • Programming with pcap | TCPDUMP & LIBPCAP

    Tim Carstens timcarst at yahoo dot com Further editing and development by Guy Harris gharris at sonic dot net Ok, let's begin by defining who this document is written for. Obviously, some basic knowledge of C is required, unless you only wish to know the basic theory. You do not need to be a code ninja; for the areas likely to be understood only by more experienced programmers, I'll be sure to des

  • Super Technique 講座~longjmpと例外

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

  • Dynamic Double-Array Library

    ダブル配列 ( Double-Array ) とは, トライ ( Trie ) のデータ構造の一つで, 「小さい辞書で高速な検索」が特長になります. トライを表現したデータ構造ですから, 「入力文字列の前方部分列と一致するキーの検索」が可能です. 使い方としては,フィルタリングや構文解析,形態素解析などがあります. ライブラリとしては,おそらく Darts が有名です. Darts: Double-ARay Trie System

  • libevでechoサーバを作る - so what

    パフォーマンスがよいよいと評判のlibevでechoサーバを書いてみる。 echod_libev.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <ev.h> #define ECHO_PORT 7 #define MAX_BACKLOG 5 #define RCVBUFSIZE 256 #define MAX_EVENTS 1024 #define die(s) do { fprintf(stderr, "%s\n", (s)); exit(1)

    libevでechoサーバを作る - so what
  • The C Preprocessor

    C 言語のプリプロセッサはマクロプロセッサであり、C コンパイラが実際のコンパイルの前にプログラムの変換を行うさいに自動的に使用される。マクロプロセッサというのは、マクロを定義できることから来ている。マクロは、ある構文に対する短縮形である。 C プリプロセッサには 4 つの独立した機能があり、目的に応じた使い方ができる。 ヘッダファイルの取り込み。ヘッダファイルは、読者のプログラムの中に置き換え可能な宣言の入ったファイルである。 マクロ展開。マクロを定義することにより、それをC 言語のコードの任意の断片の短縮形とすることができる。C プリプロセッサは、そのマクロがプログラム中に現れたなら、定義と置き換える。 条件付きコンパイル。特別なプリプロセッサ制御子を使うと、色々な条件に合わせてプログラムの一部を取り込んだり、取り除くことができる。 行番号の制御。複数のソースファイルを組み合わせたり、

  • one malloc to rule them all » Josh the Outspoken

  • GCC some extensions

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

  • Home · Wiki · GNOME / libxml2 · GitLab

    XML parser and toolkit

    Home · Wiki · GNOME / libxml2 · GitLab
  • libevent

    Support & Info Bug Tracking: Bugs & Features Mailing List: Info Git Repository: github (sourceforge - deprecated) License: 3-clause BSD IRC: #libevent on OFTC Happy Hacking You can make Libevent developers happy by reducing our wishlists! Nick's list – Niels's list The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a time

  • Red-Black Tree C Code

  • Cマガ電脳クラブ

    今は廃刊になった 「CMAGAZINE」 という雑誌に「Cマガ電脳クラブ」というコーナーがありました。 このコーナーでは毎月パズルが出題されました。 読者はC言語を使ってパズルを解き、メールか、ディスクで応募します。 応募されたものの中から、解答が毎月紹介されます。 私は2000年の5月号から参加しています。 過去に、「ウサギと犬」、「REV STAR」、「見た目は月並みですが」、 「逆さ電卓数字」、「ひと筆長旅」、「切手切って乗りきって」、 「Good Dance」において紙面にて紹介されました。 「等しく分かれた立方体」では間違った解答で応募してしまいました。 「整数解の怪」は解くことができませんでした。 このページでは私の作った解答を掲載します。 ただし、「整数解の怪」は安藤英樹さんの解答を参考にしました。 「整数解の怪」の説明は安藤さんからメールで提供していただきました。 全てのパ

  • Code for Testing for Avalanche

  • C言語: 実行時間測定の方法

    C言語において実行時間を測定する為の方法はいくつかある。gettimeofday, clock, getrusage, timesを利用する方法である。ここではこれらの方法について検証してみる。これは2005/12/30時点での情報であり、古い亊が考えられるので注意して頂きたい。さらに、内容のほとんどはmanを移しただけなので、正確な情報を得るためにそれぞれの関数のmanを見ることを強く推奨する。 System: Linux 2.6.12 glibc: glibc 2.3.5-1ubuntu12 gettimeofdayを使用する方法 通常はこの関数を使用するのをお勧めする。 gettimeofdayはSVr4, BSD 4.3準拠である。返り値の型はsys/time.hに定義されるstruct timevalで有る。

    yoppiblog
    yoppiblog 2008/05/01