
ISO、C言語の新規格「C1X」を制定 27
ストーリー by hylom
10年ぶり 部門より
10年ぶり 部門より
eggy 曰く、
国際標準化機構(ISO)が、C言語の新規格「C1X」を制定した。正式名称は「ISO/IEC 9899:2011」となっている(本家/.、The H記事)。
C++言語との互換性に優れ、マルチスレッド機能、ISO/IEC TR 19769:2004に基づくUnicodeサポート、浮動小数点型の特性を調べるマクロや静的アサーション機能などの新機能を追加しているとのこと。
プログラマーの負荷を減らす方向で (スコア:3)
1.ネームスペース
2.アクセス修飾子(private/public/protectedなど)の導入
3.プロトタイプ宣言の廃止
4.型チェック付き typedef
5.無名関数
2、3を合わせてヘッダファイルの簡略化
Re: (スコア:0)
コモンブロックの導入
Final Draft の PDF (スコア:2)
Wikipedia からたどれるリンクにFinal Draft の PDF [open-std.org] がありました。
threads.h とか追加された keyword (_Generic とか _Static_assert とか) を
追ってみるだけでもなかなか楽しめます。
Re: (スコア:0)
> _Generic
C99ではtgmath.hを実装するために各処理系が独自拡張しなさいとか無茶振りされていたのがようやく解消されたのか。
C11 (スコア:1)
「ISO/IEC 9899:2011」が2011年に正式発行されたならもう「1X」じゃないだろ。
> C++言語との互換性に優れ、
C99の機能のいくつかは(_Complex型とかrestrictedポインタとか) C++11にもバックポートされなかったしいくつかは(_Bool型とか) C++と必ずしも互換性のない形で導入された。C11でさらに差が開いたんじゃないの?
Re:C11 (スコア:1)
C99のdesignated initializerdがC++のコンパイラで
コンパイルエラーになる事ですね
typede struct _hoge {
int a;
char b[8];
} hoge_t;
#define hoge_default { .a = 10, b = { [5] = 3, [7] = 1, }, }
hoge_t x = hoge_default;
てのが通らない
Re: (スコア:0)
_ComplexはC++ではstd::complexを使えばいい。C++11で、_Complexとメモリレイアウト互換になるようわざわざ規定が追加された。
使う機会があるのかなぁ・・・ (スコア:1)
新仕様を安心して使えるのは何年か先の話なんでしょうけど、それ以前に新仕様を使う機会があるのかなぁ・・と思ったり・・。
未だに開発の大部分がCって生活しているけど、数年以上継続してるプロジェクトばかり。
継続案件で新仕様対応なんて考えにくいからチャンスは新規開発なんだけど、新規案件があんまりないんですよねぇ。
とはいえ、C99は普通に使っているんだし、10年もすれば一般的になるのかな?
ただ、ドラフト版の仕様のPDF見る限り、スレッドとatomic関係がかなり強化されているって感じでちょっと試してみたいかも。
※まぁ、pthreadとできることがそんなに変わらん気がするけど・・・多分読み落としてるところに色々あるんだろう。英語であのページ量は余裕あるときじゃないと読みきれないし理解できんorz
Re: (スコア:0)
コンパイラは対応してるけど規約やレビュアーが対応してないとか。
Re: (スコア:0)
うちはいまだにVC6でアプリ開発している。VC6は数年かけて人数分ライセンスを購入したけど、以降2005、2008、2010はポンポン新しいのが出るから数が揃わない。
ライブラリはそのまま、Cコンパイラだけ無償アップデートしてくれないかなー
Re: (スコア:0)
MSVCは2010になってもC99にすら対応していないのでこのストーリー的にはどうでもいい。
Re: (スコア:0)
そういう状態だとISO規格だろうがなんだろうが、実質gccだけでしか使えない方言だよなぁ。
そろそろCもC++もやたらマニア好みの仕様ばかり増やすのを止めてメジャーな実装とユーザーが追いつくのを待った方がいいんでは。
Re: (スコア:0)
> 実質gccだけ
最近はclangもあるよ!
Re: (スコア:0)
MSVCは、C++11 (C++0x)なら追っかけるつもりが多少あるみたいだから、C++11にも入っている分はそのうち使えるようになるはず(だといいなあ)。
Re: (スコア:0)
Windowsの文化として、かなり早くからC++に入れ込んできた(自社ライブラリをC++クラスで作り上げた)ことを考えると、C++の発展に追従する可能性はあるけど、Cの発展に追従する可能性は殆ど無い気がする。
#Cが使われているのは、デバドラだけ。そこも慣れた開発者はC++の書きやすさだけ導入してるし。
汎用マルチスレッド (スコア:0)
C言語で Windows と Linux の両方で使えるマルチスレッドのライブラリを何かで見たけどそんな感じになるのか?
それとも pthread(POSIX thread) みたいのをやるのか。
けど、お高いんでしょう (スコア:0)
CHF 338.00ってことは約28,000円かぁ。
Re: (スコア:0)
ANSI の eStandards Store でも、$387.00 ですね。高いなあ...。
http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC+9899%3A2011 [ansi.org]
C99 は、$30.00 なのに。
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899... [ansi.org]
C11が出たから安くなったわけじゃなく
結局C89が一番いい (スコア:0)
/**/コメントのネスト・//コメント・true/falseと==できるbool型・longlong等による64bit型さえあれば・・・
Re:結局C89が一番いい (スコア:1)
long longとかみたいな曖昧な指定より長さを直接指定するのがいいな。
C++で例えるなら「INT<128> hoge;」みたいなの。長さ指定を省略すると普通のintと同じみたいな。
Re: (スコア:0)
int_least32_t とかもあります。
任意のサイズは指定できないし、int128 はないけど。
Re: (スコア:0)
_boolとか、既存のコードに配慮したのは分かるんですが気持ち悪いんですよね、longlongも最高とは思わないですが。
int≠longに目をつぶればshort=16bit / int=32bit / long=64bit が一番自然なんだけどな。
あとC99は他にも色々拡張されすぎている感じがして…いまだ「プログラミング言語C」の日本語訳も出てませんしね。
Re: (スコア:0)
stdbool.hをインクルードしなさい。
# C++と違ってANSI以前との互換性のためヘッダファイルを必ずしもインクルードする必要のない処理系が多いから餌として用意したのかしら
Re: (スコア:0)
標準化されたalignment指定とか無名構造体、共用体(いずれもC11の新機能)もほしくない?
Re: (スコア:0)
alignmentも泣かされるよね
でもそうするとエンディアンも揃えないと不十分とかなってハードを効率よく利用する理念から外れるかも
日本語の説明書 (スコア:0)
C99とC1Xの詳しい日本語の説明書は出版されるのかにゃ。
Re:日本語の説明書 (スコア:1)
C99 は JIS規格 [jisc.go.jp]になっていますよ。