stlと申します。
コード上のif文などで、括弧が数百行にわたる大きなものの場合、どの括弧がどこに対応しているかを分かりやすく表示してくれる機能はe2 studioにありますか?
可読性の低いコードはそもそもコードの書き方に問題があると思います。
ウィンドウ→設定
C/C++→エディター
「外観色オプション」の「対応するかっこを強調表示」を選択して色を目立つ色にすると対のカッコが強調されます。ただし、ブロックが画面に入り切ってないような長大な場合、コードの書き方に問題があると考えまが、それを直すという正攻法じゃない方法でなんとかするとすれば
エディター→吹き出し→折りたたみ
制御構造文をチェックし、その下の「構造」もチェックするとブロック単位が折り畳みできるようになります。
あと便利なのは分割エディタでしょうね。開いているファイルを別の箇所を表示しながら作業したいときに使えます。編集対象を開いて
ウィンドウ→エディター→分割エディタを切り替える(水平、垂直を選んでください)
この時強調表示は作業している分割エディタ画面のみです。
お答えいただきありがとうございました。
括弧の後ろにカーソルがある時に、「ナビゲート」→「ジャンプ」→「対応する大括弧にジャンプ」で、対応する行に飛びます。使ったことないけど。
自分の場合、長い制御文は閉じ括弧の後ろにコメントを入れて見た目で区別が付くようにしています。#endifなども長い時は後ろにコメントを入れます。
「ナビゲート」とはどうすれば表示されますか?
メニューにないですか?
上にあるメニューのことでしたか。
分かりました。お答えいただきありがとうございました。
リカルドです。
include を上手に使えば、短く出来ます。
if 文の下に if 文が有って多重になっている時は、条件をよく検討すると、分かり易くなります。
A,B,C と三つの変数が有って、その組み合わせを if 文で判断していると複雑になります。A,B,C が YES/NO の2通りだったら最大8組の組み合わせです。3ビットの2進数に変換して、case文を使えば簡単です。case の中身が大きかったら関数を呼ぶか、include で別ファイルを差し込めば単純になります。
そういった方法があるのですね。
勉強になります。
> 3ビットの2進数に変換して、case文を使えば簡単です
リカルドさんはサラッと書いていますが、ちょっと追記させていただきます。
if 分は変数同士の比較、変数と定数の比較には使えます。case分は評価対象の変数がどの定数になったかを評価して処理を決めますのでif => caseへの変更には前提として条件分岐のもとになっている変数の見直しからやるのがいいのかなと思います。case分は事前に取りうる値が決まっているものと相性がいいのので変数が列挙型ならバッチリですね。
最初はある程度の処理内容くくりで意味のある関数名をつけて関数化がいいでしょうね。関数ジャンプのオーバーヘッドとか気になるかもですが、そんなのは組み込みの世界では最内周ループと割り込み優先度が高いもの、高頻度の割り込み処理にのみ注力してそれ以外はさして大きな影響はないです。あとコンパイラの最適化で関数はインライン化されたりもします。
もし、状態と処理が紐づいていて状態1→状態2→状態3・・・
状態1:処理1
状態2:処理2
・・・
のようなわかりやすい現状なら、状態を列挙型で定義して、列挙型の状態番号を0からフリ、処理をそれぞれ関数化、関数ポインタの配列に状態変数を与えて処理関数を個別呼び出しするとスッキリです。もちろん処理に紐付く変数のうち大域変数で埋め込んでしまったものの整理は必須ですよ。まずはリエントラントな構造へ修正ですね。場合によっては一時的な割り込み禁止の仕組みも必要です。
> 3ビットの2進数に変換して、case文を使えば簡単です。
1ビットずつ#defineしたものをcase文に書く時に CASE_A | CASE_B | CASE_C とか書いてもできそうです。列挙型とどちらが向いているかは場合によると思いますが。