サクラエディタ2.3.0がバグっていて、C/C++ が書きづらく困っています……。
適当にファイルを作って、ファイル名をa.c(C/C++ スタイルのスマートインデントが有効になるなら何でも良い)にして開いて、ダブルスラッシュの前に何か文字を入れて改行すると100%Runtime Errorが発生してエディタがクラッシュします。
例を挙げると、
a//
と打ちこんで、行頭でEnterを押して改行すると100% 落ちます。
ただし、ダブルスラッシュが行頭の場合だけは落ちません。またサクラエディタ2.0.4.0では発生しません。
コードを見たらsakura_core/types/CType_Cpp.cppのCEditView::SmartIndent_CPP() メソッド1427行目付近に、下記のような処理があり、
for( int n = 0; n < nLineLen2; n++ ){
switch( nMode ){
case 0:
if( m_pTypeData->m_bIndentCppStringIgnore && L'"' == pLine2[n] ){
...
}else if( m_pTypeData->m_bIndentCppCommentIgnore && n + 1 < nLineLen2 && '/' == pLine2[n] && '/' == pLine2[n+1] ){
SCommentBlock block = { n, nLineLen2 - 1 };
arrCommentBlock.push_back(block);
n = k; ★★★この行がnを0に戻してしまう ★★★
}
break;
...
常にk = 0なのとn = kという行のせいで、nがずっと0に戻されるため、外側のfor文がいつまでも終わらず、arrCommentBlockというベクタのような何かに、無限に要素を追加し続けた挙げ句、死んでしまうようです。
この処理でnを巻き戻す意味も、変数kの意味もイマイチわかりませんが、ざっくりn = kをコメントアウトしたところ、ご機嫌に動いています。
これ、みんな困ってないのかな?俺だけ??
この記事にコメントする
大阪市営バス 信託失敗…債権674億円放棄し民営化へ - 毎日新聞を読んで。
記事に「交通局の運転手に比べて大阪シティバスは人件費が1人当たり300万円程度安く…」とあって驚きました。人件費の半分 = 従業員年収とざっくり考えれば150万円くらいでしょう。
つまり、仕事の内容は同じだけど、仕事の価値は150万円低く評価されたわけですから、なかなかショッキングです。
自分の仕事は、自分の年収に釣り合っているだろうか…。
メモ: 技術系の話はFacebookから転記しておくことにした。
この記事にコメントする
最近cpprefjp(リンクはこちら)のコミット権をいただいたので、小物ネタから書いてはコントリビュートしていますが、一見簡単そうに見えたC++11のoverrideとfinalの経緯を調べていたら、土日が終わってしまいました。
実はoverrideとfinalは簡単ですが、同時に検討されていたhidingが鬼門でした…。
以下の例のように「間違って基底クラスの仮想メンバ関数を隠した(hiding)ときエラーにしたい」という提案から始まりました。
class A {
virtual void func();
};
// check hiding and override
class B explicit : public A {
// NG, 間違ってA::func() を隠していないか?
void func(int a);
// OK, あえてA::func() を隠すと宣言している
void func(double b) new;
};
でも事はそう単純ではありませんでした。overrideはメンバ関数同士でしか発生しませんが、hidingはメンバ関数とメンバ関数以外でも発生するため、考慮するケースが多いからです。
C++ 標準化委員会のペーパーには、問題となる例が挙げられていますが、あえて私見で「あ、これダメだ」と思ったヤツを1つ挙げると、以下の例です。
class A {
virtual void N();
};
class B explicit : public A {
// B::NはA::N() を隠すからnewを宣言すべき、でもnewを書く文法は?
enum { N };
};
初見の方はnewを使い回すなよと思うでしょう。実際、最初はhidingという名前で提案されました。しかし問題がありました。
struct A {};
struct B {
// これは構造体の宣言?変数の宣言?
struct A hiding;
};
これらの問題を回避するためにenumの中のNやらMやらにまで、一々newと書く文法を新たに作るのも、不細工極まりないです。
他にもusing、多重継承など、かなり広範に渡ってhidingが起きるため、これはダメだと判断されたようでexplicitとnew (hidingを宣言するための) は、C++11策定の最後辺りでDrop されました。
C++14にも採用されていないように見えるけど、次のC++ 規格で入るのかな…??
メモ: 技術系の話はFacebookから転記しておくことにした。
この記事にコメントする
| < | 2016 | > | ||||
| << | < | 02 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | - | - | - | - | - |
25年10月6日
25年10月6日
25年9月29日
25年9月29日
20年8月24日
20年8月24日
16年2月14日
16年2月14日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
20年8月16日
20年8月16日
20年8月16日
20年8月16日
24年6月17日
24年6月17日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: