Monthly Archives

Home >2005年07月

2005-07

スポンサーサイト
...
----- | スポンサー広告
コールバック
 Cではコールバックは大変おなじみの技法です。C++でも、もちろん同じようにしてコールバックを使うことができますが、効率を気にされるのであれば、ちょっとした工夫が必要になってきます。ところで、コールバック関数またはそのポインタをtypedefしてから使うことはないでしょうか?ここに大きな罠があります。C++の標準規格のいびつなところなのですが、関数や関数へのポインタの宣言・定義では例外指定を付けられるのですが、......
07-31 | より良いC | Comment : 0  | Trackback : 0 
割り込みハンドラ
 C++だけでなく、Cの場合も割り込みハンドラを記述するための標準的な方法はありません。通常は、関数定義の際に割り込みハンドラを指定するためのinterruptのような独自拡張のキーワードを使うか、#pragmaを使って割り込みハンドラを作るかと思います。μITRONでは、割り込みハンドラだけでなく、CPU例外ハンドラや周期ハンドラ等について、標準的な記述方法が(緩くではありますが)定められています。また、類似のものとしては......
07-29 | 実装技術 | Comment : 0  | Trackback : 0 
インライン関数再考
 「より良いC(better C)」としてC++を利用するとき、比較的導入しやすい機能のひとつにインライン関数があります。インライン関数はC99*1でもサポートされるようになりましたが、C++のインライン関数とC99のインライン関数では、微妙に仕様が異なっています。C++のインライン関数は、できる限りインライン展開することを指定する仕様である(その結果として高速になるかどうかは問わない)のに対して、C99のインライン関数は、......
07-28 | より良いC | Comment : 0  | Trackback : 0 
Embedded C++について
 いまいち盛り上がりに欠けるEmbedded C++(EC++)ですが、一体どんなものなのか見ておくことにしたいと思います。 EC++は標準C++のサブセットを目指した規格で、以下の内容にポイントを置いて言語仕様が策定されたようです。*1オブジェクト指向的に有用な部分は残しつつ、複雑な機能は削除組み込みシステム設計の要求を満たさない機能は削除過度のメモリ消費を要求するもの応答の予測が難しいものコードのROM化を妨げるものANSI......
07-28 | より良いC | Comment : 0  | Trackback : 0 
例外処理とその影響
 今回は、例外処理について、かなり突っ込んだお話をしたいと思います。本題に入る前に、まずは例外処理がどんなのものであるか、今一度確認しておきます。#include <stdio.h>class X {};void foo(){  X x;  throw x;}int main(){  try  {    foo();    puts("A");  }  catch (X& e)  {   ......
07-28 | より良いC | Comment : 0  | Trackback : 0 
より良いCとしてのC++
Cに比べると、C++には便利な機能がいろいろ備わっています。関数や演算子の多重定義やデフォルト引数、名前空間のように今日からでも使いこなせそうな機能が豊富な反面、注意しないと思わぬ罠に陥ることもあります。ところでCの方も、C99*1になって、かなりC++に追随してきましたが、そもそもC99対応の処理系が少ないことや、MISRA-Cなどの制約もあり、C++以上に導入しづらいのが現状です。それならば、やはり、より良いC(better ......
07-27 | より良いC | Comment : 0  | Trackback : 0 
標準規格の参照方法
 C++の標準規格はISO/IEC 14882:1998ですが、その翻訳版であるJIS X3014:2003をウェブ上で閲覧することができます。JISC 日本工業標準調査会のウェブサイトのデータベース検索の中に「JIS検索」というのがあります。ここから「JIS X3014」を検索してみてください。JISC 日本工業標準調査会へのリンクは、このブログの右下にも設置しておきましたので、是非利用してみてください。 ちなみに、Cは「JIS X3010」、C#は「JIS X3015」......
07-26 |  | Comment : 0  | Trackback : 0 
フリースタンディング環境
 C++の実行環境には、大きく分けて2種類があります。ホスト環境フリースタンディング環境の2種類です。ホスト環境は、OSの制御の下でプログラムが稼動する環境であり、フリースタンディング環境は、OSなしでプログラムが稼動する環境を指しますが、μITRONのような小規模なOSの環境も、現実的にはフリースタンディング環境であるといえます。Cにもホスト環境とフリースタンディング環境がありますが、CでもC++でも、フリースタン......
07-26 | 実行環境 | Comment : 0  | Trackback : 0 
実行時型識別のためのランタイム
 ランタイムについての最後の話題は、実行時型識別(RTTI)のためのランタイムです。実行時型識別のためのランタイムは大きく分けて2種類があります。ひとつはtypeidによって参照するstd::type_infoオブジェクトであり、もうひとつはdynamic_castに関わるものです。 typeidは、ちょうどsizeofのように型または式をオペランドにとる演算子です。sizeofは式を与えた場合でも、実際にその式が評価されることはありませんが、typeid......
07-26 | 実行環境 | Comment : 0  | Trackback : 0 
例外処理のためのランタイム
 例外処理機構は、ある意味でCとC++の間で最も大きな差異を作り出している要因であるといえます。例外処理機構は非常に強力な仕組みですが、C++のプログラムサイズが増大する最大の要因にもなっています。例外処理のためのランタイムには、std::terminate関数などの「目に見える」部分とtry/catch/throwといった基本構造を実現するための「目に見えない」部分に分かれます。特に、この「目に見えない」部分は、処理系によって実装......
07-25 | 実行環境 | Comment : 0  | Trackback : 0 
動的メモリ管理のためのランタイム
 動的メモリ管理のためのランタイムというのは、早い話がnewおよびdelete演算子とその関連部分のことです。new演算子はmallocを使って実装されることが多いため、newを使うためにはmallocやfreeといった外部ライブラリも必要になります。mallocやfreeといった、動的なメモリ割付け・解放を行うために直接必要な機能の他に、割付けに失敗した場合に必要になる例外処理やハンドラに関するランタイムも同時に必要になります。newおよ......
07-25 | 実行環境 | Comment : 0  | Trackback : 0 
プログラムの起動と終了のためのランタイム
 プログラムの起動と終了のためのランタイムは、主としてスタートアップから呼び出すことになります。処理系によってはサブルーチン化しておらず、直接必要な処理を自分で記述しなければならない場合もあります。具体的には、main*1が呼び出される前に非ローカルオブジェクト(関数の外で宣言されたオブジェクト)を構築し、mainからリターンした後に静的記憶域のオブジェクトを解体します。自動記憶域のオブジェクトの構築・解体......
07-25 | 実行環境 | Comment : 0  | Trackback : 0 
基本言語仕様を支えるランタイム
 Cでは、基本言語仕様を実現する上で特別なランタイムが必要になることはありませんでした。*1ところが、C++では基本言語仕様とライブラリの境界がCほど鮮明ではなく、言語に組み込まれた機能を使う場合でさえ、いくつかのクラスや関数が必要になることがあります。ランタイムが必要になるのは、ごく大雑把にいうと、次の機能を使う場合です。プログラムの起動と終了動的メモリ管理例外処理実行時型識別PC等の環境では、こうした......
07-24 | 実行環境 | Comment : 0  | Trackback : 0 
ブログ開設しました
 組み込み開発の現場では、まだまだ開発言語の主流はC言語です。C言語による開発のメリットは十分理解できますし、今後もなくなることはないでしょうが、C++を選択肢に入れることができれば、もっと快適な開発環境を手に入れることができることは確かです。このブログでは、C言語は得意だけれどもC++はよくわからない、C++は分かっているつもりだけでも痒いところに手が届かない、といった方をはじめとして、組み込み特有の事情を......
07-23 |  | Comment : 0  | Trackback : 0 

C++と組み込み環境 | Page Top▲

Navigation
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。