タグ

ブックマーク / hangstuck.com (3)

  • printf デバッグ(デバッグプリント)の書き方

    デバッグするときはデバッガを使うのが定石ですが、なんらかの事由によりそれがかなわないときもあるでしょう。そのとき頼りになるのが片っ端から printf 文をいれていく方法、いわゆるプリントデバッグです。 CPUのレジスタなどはわかりませんが、単にどこまでプログラムが実行されたか知りたいだけ、とかならこれでもなんとかなります。2分探索で切り分けていけば、仮に100万行のコードでも高々20回の試行ですみます。 今回はこのデバッグプリントのTipsをご紹介します。 デバッグビルドとリリースビルドとで有効無効を切り替える printf デバッグするときには、リリース時にはそのデバッグプリント文は削除する必要があります。手作業でそれをやっていては削除漏れが起きてしまう可能性大です。そこで、プリプロセッサの条件コンパイルをつかってそれを自動化しましょう。 例としては下記のようになります。この例では、マ

    printf デバッグ(デバッグプリント)の書き方
    iww
    iww 2019/02/06
    #define DEBUG_PRINTF 1 ? (void)0 : printf みたいな手抜きではなく、ちゃんとした書き方版
  • 組込み開発向け C言語コーディング規約 | 組込みエンジニアの思うところ

    このc言語コーディング規約の目的 このc言語コーディング規約は、組込みソフトウェア向けのC言語コーディング規約について説明します。
C言語の規格には理解しづらい規則が多くあり、それを知らずにコーディングしてバグを出してしまうことがままあります。C言語の規格を理解すればそのようなバグは避けられますが、難解な規格書を読破するには多くの時間を費やさねばなりません。そこでこの書籍では、C言語コーディング規約としてC言語の間違えやすいところを選別して記載し、開発者のみなさんがC言語の細微の規則を理解する手間を省けるようにしています。 つまり、開発者の皆様にこの文書の規約を守っていただくことで、瑣末なC言語の文法的な規則を気にせずに付加価値を高めるための作業に専念していただくことを目的としています。

    組込み開発向け C言語コーディング規約 | 組込みエンジニアの思うところ
  • 組込みソフト向けC言語コーディング規約|型の定義(構造体、列挙型、ビットフィールドなど)

    この記事では型の定義について記載します。ここではtypedefにて型を定義するときを想定しています。構造体、列挙型、ビットフィールドの定義が主に該当します。typedefは文法上見落としやすい落とし穴が意外に多いので、要注意です。 ビットフィールドに使用する型はsigned intかunsigned intにする(intも不可) C言語の規格上、ビットフィールドに使える型は、int, signed int, unsigned intのどれかです。また、ビットフィールドの場合はintは符号付か符合無しになるかはコンパイラ依存なので、明示的にsignedもしくはunsignedをつけてください。 違反コード typedef struct { unsigned long member_a: 2; // 型がlong. int member_b: 2; // 符号(signed or unsign

    組込みソフト向けC言語コーディング規約|型の定義(構造体、列挙型、ビットフィールドなど)
    iww
    iww 2018/07/24
    ビットフィールドはコンパイラによって 並び順が逆になったりするので そもそも使わない方が良い。 うちでは二度とつかわせない
  • 1