トップページ

本棚


両手で1000まで数えられますか?:2進法の話
数値 - 危険物取り扱い注意
100 × 200 =32?:変数のオーバーフローの話
パリティビット
小数の扱いについて
ぽいんた
ぽいんた2
ぽいんた3
ジ・オリジン
ジ・オリジン:補足
かっこつける話
かっこつける話2
文字列のこと
タイミングの話
拡張性の話
取り込む話
staticな話

コンパイルの話1
コンパイルの話2:止まらぬビルド
コンパイルの話3:マシン語に落ちるということ1:メモリの話
コンパイルの話4:マシン語に落ちるということ2:最適化
コンパイルの話5:マシン語に落ちるということ3:変数とスタック
コンパイルの話6:コンパイラはそもそも何をやってくれるのか??
リンクの話
プリプロセッサの話

OS、というもの

オブジェクト指向1
オブジェクト指向:2
オブジェクト指向:3

オブジェクト指向:番外 C言語のソースファイルの話
オブジェクト指向:番外 C言語での「再利用性」と「カプセル化」データ構造とアルゴリズム


抽象的な話

寝込んで布団の中で考えたこと
こんなの、常識??
お仕事プログラミング
ソフトでハードなプログラム
プログラムするということ
お勉強
プログラムを学ぶということの補足
C言語:「学問」と「実務」
統合開発環境
C言語ってポータブルですか?
C言語ってポータブルですか?:2
あなたは、どう読みますか?
ああ勘違い
試してガッテン
低級品
質問をするということ
ポカ
「何もしない」 != 「無駄」
エディタの話
もっと手を抜こう

いまどきの、アセンブラ

VisualStudio2005
VisualStudio2005:2

戦争の防ぎ方、に対する私の考え
身近な差別
改革
地球に優しいなんて大嘘
統計で嘘をつく方法

言葉について
言葉について:2

神が死んだということ
善悪の彼岸から、力への意思を目覚めさせるということ

本を読むということ
本を読むということ:2

絵を描く話
地図
地球儀

オカルトのお話
がんだむさん
RPGソフトウェア
記紀神話の不思議



メニュー

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

C言語に限ったことではないんですが。

C言語には学問としてのC言語と実用としてのC言語があると思います。

どういうことかというと、
【学問としてのC言語】
  • ANSI規格への理想的な準拠とみなす
  • アルゴリズムの探求
  • C言語のみで記述する

【実用としてのC言語】
  • ANSI規格と合致しているとは限らない
  • まず納期と仕様
  • 場合によってはアセンブラも併用する

こんな感じで言いたいことつかんでいただけるでしょうか?

学校なんかで習うC言語は前者だと思います。
入門書なんかのC言語も、そうですね。


しかしながら。


実際、業務においてC言語を使用する場合は後者であることがほとんどです。

実際、現作業で使っているWindRiverのTornado環境では
printf( "Hello "
    "C "
    "World\n");
という記述がエラーにされてしまいます。規格ではOKなのに。

実際VC++などでさえ、完全な「ANSI対応」ではありません。


また、かなり下回りの(ハードに密着した)I/O部分などはいまだにアセンブラを使用したりします。
特にセンサとのやり取りなど。

他にもアセンブラを使用する局面があります。
それは、「コンパイラのバグを疑う」時です。

99%まではまあプログラマのミスなのですが、本当にまれなケースとしてコンパイラのバグによってプログラムが正しく動作しない、ということが起こります。

こんなときはいくらソースファイルを修正してもまったく無駄としか言いようがありません。正しいC言語プログラムを書いても、正しい実行ファイルにならないのなら、吐き出されたアセンブラコードを解析するしかありません。

この場合は該当部分をインラインアセンブラなどで記述するか、またはアセンブラで作成したオブジェクトファイルを作ってCで書いたほかのモジュールとリンクするしかないでしょう。


コンパイラにバグがある、というのは組み込みの世界では割とよくあることのようです。私自身はまだ経験したことはありませんが。

組み込みの世界ではターゲットにあわせてCPUを選定します。

それはコスト面で決定するのかもしれませんし、機能面で決定するのかもしれません。

それら多様なニーズに合わせて、多種多様なCPUが存在します。(興味のある方はNECやルネサスのマイコンチップのページをご覧になれば、いかに多くの種類のCPUがあるかわかっていただけると思います)

そして、そのような星の数ほど種類が存在するCPUは、それぞれ命令セットが異なります。

そうなると当然、C言語をコンパイルしてマシン語に落とす際にそれぞれのCPUの命令セットにあわせてコンパイルする必要があるわけです。つまり、その数だけコンパイラを作らなければいけません。

技術の進歩の早いこの業界においては、日々新しいCPUがデビューしています。

当然、そうなると時間もあまりかけていられませんし、数も膨大です。そのような状況でコンパイラにバグがある、というのはむしろ当たり前なのかもしれません。


そこらあたり、正直とても泥臭いとは思います。

また、学校でC言語を学んできた学生が戸惑うところではないかと思います。また、学問としてのC言語を生業としている人(情報科の教授さまとか)にも理解していただけないかもしれません。



とはいえ、あくまで業務でのC言語とは「手段」であって、「目的」ではありません。
「目的」とはこの場合、「仕様を満たすこと」「機能を実現すること」であるので、コンパイラに文句を言っても仕方ありません。

たとえアセンブラが混じろうが、ロジックとしてエレガントでなかろうが、「納期」と「仕様」を満たすことが至上命題なのです。

やっぱり、泥臭いなあ。。




| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー