タグ

c99に関するmoozのブックマーク (8)

  • 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の日記
    mooz
    mooz 2013/07/05
    pointer aliasing
  • GitHub - rui314/8cc: A Small C Compiler

    8cc C Compiler Note: 8cc is no longer an active project. The successor is chibicc. 8cc is a compiler for the C programming language. It's intended to support all C11 language features while keeping the code as small and simple as possible. The compiler is able to compile itself. You can see its code both as an implementation of the C language and as an example of what this compiler is able to comp

    GitHub - rui314/8cc: A Small C Compiler
    mooz
    mooz 2012/05/12
    C99 コンパイラ.セルフホスティング可能.マシンコードの生成まで.
  • フリーソフトウェア徹底活用講座 - GCC - 岸哲夫 - Interfaceコラム目次

    ◆移り気な情報工学 第62回  地震をきっかけにリアルタイム・システム再考 第61回  海を渡って卵を産む北京の「海亀族」 第60回  超遠距離通信とソフトウェア無線 第59回  IT先進国フィンランドの計画性 第58回  物理的に正しいITの環境対応 第57回  年金,e-チケットに見るディジタル時代の情報原 第56回  「着るコンピュータ」から「進化した布地」へ 第55回  技術を楽しむネットの文化 第54回  情報爆発2.0 第53回  プログラミングの現場感覚 第52回  GPS+LBS(Location Based Service)がおもしろい 第51回  技術の格差社会 第50回  フィンランドに見る,高齢化社会を支える技術 第49回  たかが技術倫理,されど技術倫理 第48回  若者の理科離れ,2007年問題から「浮遊」せよ 第47回  機械のためのWWW――Google

    mooz
    mooz 2010/09/03
    GCC 独自拡張の説明など.
  • プログラミング言語 C の新機能

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

    mooz
    mooz 2010/06/25
    "restrict 修飾子は、前述したようなポインタが同じ内容を指していないという情報をコンパイラに提供することができます" => コンパイラが SSE を使った最適化などを行える.
  • リリカル☆Lisp開発日記 » Blog Archive » with-open-fileをC++/C99で

    Common Lispにはwith-open-fileというマクロがあります。 (with-open-file (stream filename) ... (read-line s) ... ) このマクロは、ファイルをオープンして、 ここを抜けるときに自動的にファイルをクローズしてくれるというものです。 そのため、ファイルの閉じ忘れがおこりません。 このマクロをC++、もしくはC99で再現する方法を思いついたのでメモしておきます。 #define with_open_file(s,p,m) \ for(FILE *s=fopen(p,m); s; fclose(s),s=NULL) ... void hoge(char *path) { char buf[256]; with_open_file(fp, path, "r") { ... fgets(buf, sizeof(buf), f

    mooz
    mooz 2010/06/09
    マクロで for (FILE *s=fopen(p,m); s; fclose(s),s=NULL) としておくと, ブロック構文のように使える.
  • ホワット・ア・ワンダフル・ワールド tgmath.h の実装ってどうやってんだ ?

    私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ 今,なんか手元の Windows 機の gcc だと,/usr/include に tgmath.h が見つからない (include もできないっぽい) ので,メモだけ. J 2007-01-15 ■ Cで型安全可変長配列ライブラリをつくる のコメント欄 shinichiro_h 『C のテンプレートというと、既に言ったことあるかもですが、 C99 の tgmath.h は C でテンプレート関数の特殊化やったりしててステキだと思います。』 (2007/01/18 14:56) 確かに,C99 の tgmath.h の仕様はムチャクチャです. プログラミング言語 C の新機能 9.6 tgmath.h: 型総称数学関数 とても標準 C99 の枠内で実装できるとは思えないのですが…

    mooz
    mooz 2010/06/04
    C99 の tgmath.h (型によって展開される関数名を変える) がどのように実装されているか. Don't ask how it works.
  • よくあるこういうのにハマった。 - moriyoshiの日記

    ついやってしまうので自戒を込めて。 (C99) #include <stdio.h> struct vector { double elts[3]; }; #define create_vector_1(a, b, c) (struct vector){ a, b, c } static inline struct vector create_vector_2(double a, double b, double c) { return (struct vector){ a, b, c }; } static void print_vector(struct vector v) { printf("(%g, %g, %g)\n", v.elts[0], v.elts[1], v.elts[2]); } int main() { { double f = 0; print_vector(cr

    よくあるこういうのにハマった。 - moriyoshiの日記
    mooz
    mooz 2010/04/27
    どういった最適化のされかたなのだろうか.
  • Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある件について - 竹迫の近況報告

    http://twitter.com/k_morihisa/status/9006163842 Twitter / Morihisa Kazuaki: Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある.謎 Linux-Kernel Archive: 2.6.18-git9 wireless fixes break ipw2200 association to AP with WPAのパッチとかみると、たしかにこんな断片のC言語のソースコードがでてくる。 @@ -242,24 +234,24 @@ [SIOCSIWESSID - SIOCIWFIRST] = { .header_type = IW_HEADER_TYPE_POINT, .token_size = 1, - .max_tokens = IW_ESSID_MAX

    Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある件について - 竹迫の近況報告
    mooz
    mooz 2010/02/13
    with っぽいなにか。インデックスを指定した配列の初期化。
  • 1