2009-07-17
GCC 4.4時代のC++プログラミング(C++プログラマーの受難な日々の巻)
C++プログラマーや各ディストリビューションのパッケージメンテナーは必見。GCC 4.4 + glibc 2.10でハマらない為のテクニック。
詳しくはリンク先を参照。執筆者は今のGentoo界を牽引する我らがリーダー、Diego E. “Flameeyes” Petten〓先生。
Flameeyes’s Weblog : How _not_ to fix GCC 4.4 bugs
ざっくり要約
#include <cstring> int main() { char *foo = strchr("ciao", 'a'); }
は、GCC 4.3までは問題ないが、GCC 4.4だとエラーになるぜ。
error: invalid conversion from ‘const char*’ to ‘char*’
でも決してこんな対策はすんな。目をつぶってるだけだ。
#include <cstring> int main() { char *foo = (char*)strchr("ciao", 'a'); }
で、こうするのがいいんだが、
#include <cstring> int main() { const char *foo = strchr("ciao", 'a'); }
constになっちまうのは困るんだろ?じゃあこうだ。
#include <cstring> int main() { char *foo = const_cast<char*>(strchr("ciao", 'a')); }
つまり、型キャストはC言語流ではなくC++言語流でやれ、っつーことだ。
現時点でその影響が判明しているソフトウェア
で、Gentoo界ではFlameeyes先生が調査しまくってて各所で絶賛対応中。
次の日本発(?)系ソフトウェアでも影響があることが判明している。
- canuum
- ochusha
- scim-bridge
- w3mmee
まだまだ他にもたくさんありそうだ。恐ろしや。
GCC 4.3も落とし穴があって大変だった*1が、GCC 4.4もパッケージメンテナー泣かせ。C++プログラマーの皆様、お願いだからしっかりきっちり書いてね。またはC++を使わないでくれ。
*1:ちゃんと#include <cstring>しろとか2回#defineすんななど。
トラックバック - http://d.hatena.ne.jp/tmatsuu/20090717/1247835994
リンク元
- 4 http://d.hatena.ne.jp/rubikitch/
- 3 http://d.hatena.ne.jp/rubikitch/20090710/1247159893
- 3 http://matsuu.org/
- 3 http://oquno.tumblr.com/post/77659317
- 3 http://www.google.co.jp/reader/view/?hl=ja&utm_source=ja-wh
- 2 http://74.125.153.132/search?q=cache:MmKCJ8s6A2kJ:d.hatena.ne.jp/tmatsuu/20071020/1192983868+Xorg+フォント+優先&cd=4&hl=ja&ct=clnk&gl=jp&lr=lang_ja&client=firefox-a
- 2 http://bit.ly/DS99X
- 2 http://blogs.wankuma.com/ch3cooh/archive/2009/02/13/168066.aspx
- 2 http://d.hatena.ne.jp/androidzaurus/20080627/1214555883
- 2 http://ezsch.ezweb.ne.jp/search/ezGoogleMain.php?query=メアドチェック&start-index=4&adpage=3&mode=02