C

headmaster 2013

C Ada

URL → https://github.com/ytomino/headmaster/wiki/Document前回 → http://d.hatena.ne.jp/ytqwerty/20101025#p1というわけで良いタイミングですので(?)、headmasterの現状を書いておきます。 headmasterと先達プロジェクト headmasterは、C言語を滅ぼすこ…

libxml2は更に酷かったという話

C

先述の循環参照への対応は実装しました。これでもうopaque typeが変な使われ方をしていても大丈夫!ええ、めんどくさかったですが。 でも、libxml2には更にその先があったのです……。xmlregexp.h /* 宣言A */ #include <tree.h> /* 宣言Bを使う */ tree.h /* 宣言B */</tree.h>…

Exceptional C++を焚き付けにする話

C

引きずって申し訳ありませんが、先のranhaさんの発表を聞いて以来、Exceptional C++を読み返しています。 で、116ページでとんでもない文を見つけてしまいました。 先行宣言で十分な場合は、決してヘッダをインクルードしないこと。 とんでもない!この一文…

Cの.hからのトランスレータ

C Ada

ある程度形になってきたためこっちに書きます。 http://panathenaia.halfmoon.jp/alang/headmaster/ Cの.hをAdaの宣言に直すトランスレータです。この間の愚痴はこれを作っていたのでした。やっていることは、-fdump-ada-specの二番煎じ、SWIGの三番煎じ、CI…

strcpy_sなんて使うな

C

超今さらですが、C1x?に、セキュア文字列関数群*1が正式に入るみたいですね。http://www.open-std.org/JTC1/SC22/WG14/www/projects#24731-1で、google:strcpy_sで検索すると、strcpyなんて使うな。安全でセキュリティの高いstrcpy_sを使え!という旨の文面…

マクロの用途の類型

C

http://panathenaia.halfmoon.jp/alang/headmaster/h.html最近またCから他言語へのトランスレータ作りに熱が入ってたりするのですが、ほんとに何年たっても一向に完成の兆しは見えず。 パーサはある程度動くようになったので、普段使っているライブラリのヘ…

規格通りパースできないC言語

C

FreeBSDのstdarg.hとstdio.hで、va_listの定義が重複しているのを見つけました。一応#ifdefで囲われてはいますが、使われているマクロ名が違うために両方通ってしまうというお粗末さです。でもFreeBSDのヘッダーに文句を言いたいわけではなくて。(……まあstda…

よくわからない

C

$ cpp #define a b #define b a a b (Ctrl+D) a b$ cpp #define a b #define b c a b c (Ctrl+D) c c c$ cpp #define a() b() #define b() a() a() b() (Ctrl+D) <stdin>:3: error: detected recursion whilst expanding macro "a" <stdin>:4: error: detected recursion w</stdin></stdin>…

めたぷろぐらみんぐ

C

これがめたぷろぐらみんぐに該当するかどうか2日ぐらい考えてます。 typedef char x<:100:>; typedef char y<:200:>; typedef struct <% x x; y y; %> z; #include<stdio.h> int main() <% printf("%d + %d = %d\n", sizeof(x), sizeof(y), sizeof(z)); return 0; %> 用途は、「定数</stdio.h></:200:></:100:>…

foo == &foo

C

http://shinh.skr.jp/m/?date=20090122#p02 一貫性のためには、配列を値として扱えるセマンティクスが必要なのでは。配列のoperator [ ]とポインタのoperator [ ]が別の意味でオーバーロードされていること自体は無害な筈。D言語もDelphiもそうですし。 逆の…

中括弧だけでCを嫌うのは良くない

C

私が中括弧を見るだけで吐き気がして嫌悪感を感じて近寄りたくない触れたくないとわめいていることは皆さんもうご存知と思いますが、これで明日から生きていけそうです。 #include<stdio.h> int main() <% char msg<::>="Hello, world!\n"; printf("%s", msg); %></::></stdio.h>

Repl

C

http://neugierig.org/software/c-repl/ via あちこち "Repl"という名前含めて激しく既視感があるなw 仕組みはこれと同じでいいようだ。(.bplと違って).soで不足している情報はgdbからかき集めているっぽい。 まあ誰でも考えると言うことでひとつ。

名前付き引数

C

http://d.hatena.ne.jp/odz/20070531/1180579571 Ada。 ……というお約束はお約束として、C99の複合リテラルを使えば、事実上Cでも実現できますよね。 fish = Fish(&(struct fishargs){.speed = 2, .direction = 180, .x = 20, .y = 20, .minDistance = 16, .m…

ほら!

C

http://d.hatena.ne.jp/kikx/20061120#1164011256 こんな人が出てくるから*1、益々C言語が負の要素のせいで栄えるんだよ! 悔しいから問題出してやります。(←言動不一致) int *(*x[3])(int, int); int *(*y)[3](int, int); int *(*z(int, int))[3]; *1:超恥…

int (*hoge(int, int))(int);

C

ふつーにわかってしまったため話題にしそびれた私はきっと負け組。 それで思ったのですが、Cの強みとして、この記述が何を表してるんだ?って解説だけで1エントリ作れてしまうのがあるよなあ。同じ密度の高く読み辛い言語でも、自分にしかわからない記号使い…

比較とかそういう

C

unsignedとsignedの比較は、どっちに合わせられるのが規格上正しいんでしょうか。 両方ともをよりビット幅の大きい型に直してから比較するのは勿体無いので無しとしても、unsigned_var > -1がunsigned_var > 0xffffになったりするのは悪夢ですのでsignedで比…

NULLを示すビットパターン

C

大体アドレス0に意味のあるデータ(割り込みベクタ)があったのにNULLが0だったPC-98時代の時点で既に、NULLが特別視される必然性も何も無い単なる約束事というのは当たり前だった気もするのですが……。 ポインタにNULLが、floatにNaNがあるなら、intにだって無…

#ifとsizeof

C

Borland C/C++だと、#if中でsizeof使えるんですよね。 「この構造体は64バイトでなければいけない」みたいなのがトリックを使うことなくコンパイル時に検出できるので便利といえば便利なんですが、規格はどっちが正しいんでしょう。 まー、プリプロセッサと…

C for Haskeller

C

http://d.hatena.ne.jp/w_o/20061008#p1http://d.hatena.ne.jp/niha/20061008#1160319491勿論すごい人の以下略。Haskellから入った人には、ポインタとか以下略。対象読者は以下略。Cとは、以下のような特徴を持ったプログラミング言語です 参照透明(!) 型推…

精度落ちの警告

C

a,b,cがcharとかshortとかとにかくintよりビット幅の少ない型として、いくら式は全部intになるといってもa = b | c;で警告出すようなコンパイラはいかんと思うのです。反射的にa = (char)(b | c);とか書き加えて実はshortだったりしたらはまるのです。 何が…

C99よりもC++0xよりも

C

関数内関数欲しい関数内関数欲しい関数内関数欲しい関数内関数欲しい以下略。 BDS2006のC++はBoostほぼ対応とか謳ってますが、そんなのはどうでもいいので関数内関数使わせてください。gccなんかとっくの昔っから独自拡張してますのに。…といってもVC++も対…