機能安全を脅かすC言語に潜む危険への対処

本稿では、セーフティクリティカルな機能を持つシステムの開発にC言語を使用する際に生じる問題について検討します。機能安全を実装する際に必須の知識です。
C言語は、未定義動作やハードウェア依存性といった落とし穴を多数抱えているにも関わらず、幅広く使用されており、セーフティクリティカルな開発分野では好んで用いられている言語です。問題となりえる点をあらかじめ考慮して利点に変えることが可能です。

C言語はどのような言語か

1991年、『Developer’s Insight』誌に「How to Shoot Yourself In the Foot(自分の足を撃ち抜く方法)」という面白い記事が掲載されました。記事は次のように始まります。「昨今、新たなプログラム言語が急増しています(そのいずれもが無数の機能を互いに盗みあっているように見えます)が、そのために、ユーザは自分が今使っている言語が何なのかさえも覚えていられなくなってきています。このガイドは、そのようなジレンマに陥っているプログラマを助けるサービスとして提供されるものです。」
言語のリストはCから始まり、そこには一言こう書かれています。

• C:自分の足を撃ち抜く言語

辛辣な表現ですが、この言葉には一片の真実以上のものが含まれています。一方、C以外のプログラミング言語は、型安全性や未定義動作などの問題は、はるかに少ないとはいえ、多くの場合、ハードウェアに近いプログラミング機能が欠けています。今後もCを使い続けていくのであれば、うまくバランスを取る必要があります。つまり、わかり易い落とし穴とわかり難い落とし穴の間をうまく通り抜けながら、その機能を最大限に活用する必要があります。セーフティクリティカルな機能の開発では、C言語を次の2つの視点から見ることができます。

• プログラミング言語の選択に関し、セーフティクリティカルなプロジェクトには、どのような外部条件があるのか?
• Cにおいてより明確な問題を軽減するには、どうすればよいか?また、レガシーコードを使用する場合はどうすればよいか?

続きは資料DLしてご覧ください。

作成:IARシステムズ株式会社