とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

プログラム言語C

括弧初期化リスト(braced-init-list)内では順番に評価される

通常の引数の評価順序 C言語でもC++言語でも関数呼出しのために渡される引数の評価順序は未規定となっています。 #include<stdio.h> void print_sum(int a, int b, int c, int d){ printf("\n%d\n", a + b + c + d); } int main(){ print_sum(printf("%s", "hello"), </stdio.h>…

IS_EMPTYマクロを自作してみた

自作と書いていますが、BOOST_PP_IS_EMPTYのソースを読んでほとんどマネています。また gcc 4.8.2 でのみテストしています。 #define EMPTY() #define DEF_COMMA0 _,1 EMPTY #define COMMA0() ,0 #define TUPLE2_ELEM1_I(f,s) s #define TUPLE2_ELEM1(t) TUP…

VS 2013でC99対応がされる予定

VS 2013でC99対応 via: Visual Studio 2013 のリリース版で更に追加される予定の C++11 の言語機能 - C++でゲームプログラミング C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013 - Visual C++ Team Blog - Site Home - MSDN Blogs id:osyo-…

C11 の機能

→[C/C++規格: 10] C11の新機能 その1 -- 新機能概要 | Yoh2の日記 | スラッシュドット・ジャパン 前にはてなキーワードで C1X を書いたことを思い出した。古くなってるけどあんま変わってないな。 C1Xとは - はてなキーワード スレッド周りは翻訳もした。#in…

C11が来た!?

ISO/IEC JTC1/SC22/WG14 - C News 2011-12-19: New revision of ISO/IEC 9899:2011 C standard (C11) published ISO/IEC 9899:2011 - Information technology -- Programming languages -- C C11が出るって話出てましたっけ?予想より早い。 それともか,私…

clp2 次の2のべき乗への切り上げする関数の速度調査

※追記:別バージョンの関数を追加しました 元ネタ 【募集】整数である入力の値以上の最小の2のべき乗に切り上げた値を返すスマートな関数2011-05-31 17:11:48 via TwitVim Ideone.com | Online C++ Compiler & Debugging Tool

GCC 4.5.3 でました!

→GCC 4.5 Release Series - GNU Project - Free Software Foundation (FSF) →GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF)

C1X のドラフト更新

→Post London (2011) mailing – February 2011 最新のドラフトはN1569になったようですね。 N1569 N1570 diff有り ん?そういや,Februaryっておかしくないか?修正忘れ?

GCC 4.4.6 でました!

→GCC 4.4 Release Series - GNU Project - Free Software Foundation (FSF) →GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF)

GCC 4.6 でました!

→GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) →GCC 4.6 Release Series - GNU Project - Free Software Foundation (FSF) C1Xの対応が始まったり,C++0xの対応が進んだりうれしいバージョンですね。

C/C++プログラミングの「迷信」と「誤解」

高木さんの迷信シリーズが本になって出るようです。 →何かが違う... | 株式会社きじねこ あと、当サイトの「C/C++迷信集」との関係についても少しお話しておきましょう。「C/C++迷信集」の内容は非常にあっさりしていますが、書籍『C/C++プログラミングの「…

C言語の問題点

なんとなく考えたことをメモ。 charが文字型と1バイトの定義の両方の役割を持つ。これが分離されていれば wchar_t が不要な場面が増えたと思う。 プログラマがメモリリーク,リソースリークをおこさないようにする仕組みがない。RAII, using, scope exitみた…

Re: C言語の変数を初期化で相互/循環参照させる。static は無理?

→C言語の変数を初期化で相互/循環参照させる。static は無理? 多分、関数のプロトタイプはあるけど、変数のプロトタイプは無いとかそういうのが問題。 いいえ。仮定義(tentative definition)があります。 どうしてもやりたかったら、実行時に代入するしかな…

__VA_ARGS__ がよく分からない

C99, C++0xで使える__VA_ARGS__がよく分かりません。 次のようなコードをプリプロセッサにかけてみることを考えます。 #define A(...) __VA_ARGS__ #define B(a, ...) a, __VA_ARGS__ A() // Nothing A(a) // a A(a, b)// a, b B() // Warning. B(a) // Warn…

C1X のドラフト更新

→Post Batavia mailing – December 2010 N1539 [PDF] diff marks 無し N1547 [PDF] diff marks 有り どういうわけか,今回は二種類公開されています。多分文面に違いはないので好きなほうをダウンロードするといいと思います。 N1525: Memory-Order Rational…

GCC 4.6.0 20101127 (experimental) における C1X 対応状況

GCC 4.6.0 でC言語の次期規格C1Xの実装が少しずつ進められているようです。 今回は以下のバージョンでテストをしてみました。 gcc.exe (GCC) 4.6.0 20101127 (experimental) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see …

C99, C++ で使える using マクロ書いた

C# なんかである using をマクロ使って実装してみました。とはいっても,C++ は RAII があるので,主なターゲットは C99 です。古いC言語では for 内で変数の宣言ができないので対応していません。 あ,using ブロック内で return するとリソースリーク起き…

7.15 Alignment <stdalign.h> を翻訳

というわけで,新しい について調べて翻訳してみました。 翻訳 7.15 Alignment 7.15 境界調整 1 The header defines two macros. は二つのマクロを定義する。 2 The macro alignas expands to _Alignas. マクロ alignas は _Alignas へと展開する。 3 The rem…

新しい標準ヘッダ (Standard headers)

以前,C1X から追加される標準ヘッダを紹介しましたが,新しいドラフト(N1516)では,さらに ヘッダが追加されています。これで,標準ヘッダは28個になりました。 全ての標準ヘッダ <assert.h> <complex.h> <ctype.h> <errno.h> <fenv.h> <float.h> <inttypes.h> <iso646.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdalign.h> <stdarg.h> <stdatomic.h> <stdbool.h> <stddef.h> </stddef.h></stdbool.h></stdatomic.h></stdarg.h></stdalign.h></signal.h></setjmp.h></math.h></locale.h></limits.h></iso646.h></inttypes.h></float.h></fenv.h></errno.h></ctype.h></complex.h></assert.h>

<time.h>,<ctime>を図で表してみる

型は time_t と struct tm と char* です。これらの変換を図で表してみました。 gmtime localtime +--------------+ | | | v time -> time_t struct tm | ^ | | | | mktime | |strftime ctime| +--------------+ |asctime | | +------> char* <-----+time_t …

C標準ライブラリとBoostが出会ったら (2)

今回は前回の予告どおり,time_t を optional 化してみます。 // ライブラリ #include<ctime> #include<boost/optional/optional.hpp> namespace sscrisk{ boost::optional<std::time_t> time() { std::time_t const t = std::time(0); return t != static_cast<std::time_t>(-1) ? boost::make_optional(t) : boost::option</std::time_t></std::time_t></boost/optional/optional.hpp></ctime>…

C標準ライブラリとBoostが出会ったら

どうなるのか?というネタに挑戦。 今回は の struct tm あたりで遊んでみます。Boost を使うのでもちろんコードはC++です。 tm を lexical_cast して string を得られるように拡張してみます。 // ライブラリ #include<iosfwd> #include<ctime> #include<string> std::ostream& ope</string></ctime></iosfwd>…

二進数表記できるマクロ

えー、C言語で2進数って書けないのー?ショックすぎるやろ・・・2010-09-10 17:38:32 via Twit for Windows じゃあ,プリプロセッサの力を借りてC言語・C++でも二進数を書けるようにしようぜ! // ライブラリ // SSCRISK_BINARY(binary) // 0 〜 11111111111…

VC++10 の<stdint.h>, <cstdint>はバグっているのまとめ

VC++10 の<stdint.h>, <cstdint>はバグっている (1) VC++10 の<stdint.h>, <cstdint>はバグっている (2) VC++10 の<stdint.h>, <cstdint>はバグっている (2) へのツッコミ VC++10 の<stdint.h>, <cstdint>はバグっている (3) VC++10 の<std…

VC++10 の<stdint.h>, <cstdint>はバグっている (2) へのツッコミ

「VC++10 の<stdint.h>, <cstdint>はバグっている (2)」に関して議論したり,ツッコミをいただいたりしました。みなさまありがとうございます。 本の虫: 「VC++10 のcstdintはバグっている」にたいするツッコミ と コメント欄 Twitter の皆さん VC++10 …

VC++10 の<stdint.h>, <cstdint>はバグっている (4) へのツッコミ

「VC++10 の<stdint.h>, <cstdint>はバグっている (4)」にツッコミをいただきました。みなさんありがとうございます。 一部または全文を引用します。詳細はリンク先をご覧ください。 たかぎ 2010/05/26 13:09 これは確かに間違っていますね。 キャストす…

VC++10 の<stdint.h>, <cstdint>はバグっている (4)

<追記> このエントリは丸ごと間違っているかもしれません。みんな規格書を参照しよう…。 </追記> <追追記> 規格書確認したけど,やっぱ間違ってる。このエントリの主張を撤回。 </追追記> <追追追記> →VC++10 の<stdint.h>, <cstdint>はバグ…

VC++10 の<stdint.h>, <cstdint>はバグっている (3)

Microsoft Visual C++ 2010 の , ヘッダにはさらにバグがあります。 本来これらのヘッダはC言語とC++とで処理を切り分けなければなりません。規格(JIS X 3010:2003)には次のようにあります。 7.18.2 幅を指定する整数型の限界値 7.18.2 の各箇条でのオブジェ…

VC++10 の<stdint.h>, <cstdint>はバグっている (2)

<追記> このエントリは丸ごと間違っているかもしれません。「VC++10 の<stdint.h>, <cstdint>はバグっている (2) へのツッコミ」を参照のこと。 </追記> Microsoft Visual C++ 2010 の , ヘッダにはまだバグがあります。 以下は の一部を並び替えし…

VC++10 の<stdint.h>, <cstdint>はバグっている (1)

Microsoft Visual C++ 2010 の , ヘッダにはバグがあります。 の 33行目 typedef char int_fast8_t; int_fast8_t がバグっています。char が符号有り(デフォルト)ならば問題はありませんが,char が符号無し(cl.exe /J)だと問題が発生します。 // int_fast8_…