サクラエディタ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 | - | - | - | - | - |
合計:
本日: