組み込みC/C++

C/C++リテラシー向上のためのページ

2013-02-01から1ヶ月間の記事一覧

オブジェクト指向?

構造化プログラミングからオブジェクト指向へというのをよく聞きます。 構造化プログラミングの定義を調べると「一つの入口と一つの出口を持つプログラムは、順次・選択・反復の3つの論理構造によって記述できる」とあります。 順次はPCが逐次実行されていく…

case文を消したい②

前回に引き続きcase文の回避方法です。今回は多相性(多様性、多態性、どれが正しい表現かわかりませんが関数のオーバーロードを使います)を使ってみたいと思います。 リファクタリング対象のコードは下記になります。 cliant.cpp #include <iostream> #include <conio.h> #inclu</conio.h></iostream>…

case文を消したい①

case文といえば後の変更がわずらわしい悪の権化のように語られます。そんなわけでcase文の消し方を紹介しようかと思います。 リファクタリング対象のコードは以下のようなコードです。 #include <iostream> #include <conio.h> void writeWhiteTask(void); void writeBlueTask(v</conio.h></iostream>…

”長さ”について

文字列やバイナリデータを扱う上で”長さ”は非常に大切な要素です。しかしながらなかなか長さについて言及される事がないように思いましたので、ここで”長さ”について改めて考えてみます。 たまに”長さ”なのに0スタートで数えるプログラム(0x00~0x0Fの長さを…

ゼロ初期化する時にどうするべきか?

C言語ならアドレスの初期化は NULL ←(void *)0 で定義されている事が多いですが処理系のstdio.hの中身をチェックしてみてください。多くの場合0で構わないと思われます。void*でキャストしたときの評価が16bit, 32bitと選べる処理系もあるようです。 C++言語…

ヘッダのプロトタイプ宣言にstaticをつける

下記のようにヘッダのプロトタイプ宣言にstaticをつけるとどうなるでしょうか? ab.h static void g_func(void); a.cpp #include "ab.h" int main(void){ g_func(); return 0; } b.cpp #include <iostream> #include "ab.h" static void g_func(void){ std::cout << "</iostream>…

#define をconstにすべきか?

C++の教科書を見ると定数は#defineを使用しないでconstを使用する事を推奨しています。しかし組み込みシステムではいささか疑問が残ります。多くの人が経験するように組み込みシステムのリソースは常に逼迫しています。出来るだけオブジェクトの容量は小さ…

C言語アドレス(ラべリング)の不備

C言語ではコンパイラがコンパイルの際にリンカが検索できるようにグローバル関数の名前を変えます。void a_func(void) とあったらオブジェクト(アセンブリ)では _a_funcのように接頭に_(アンダーバー)が付帯されて表現されます。ここに引数の情報がない事で…