2005年07月10日(日) C言語
プリンタを購入。やっぱ必要になりました・・・
学生時代、社会人のC言語講習で質問されて答えれなかった質問の答えが分かりました。
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int main(void){ char name[256]; scanf("%s",&name); printf("%s\n",name); return 0; } |
scanf の 「&」が不必要なのは言うまでも無いですが、実は実行結果は問題なく表示されます。
これは次のような違いが生じます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main(void){ char name[256]; <span class="red11">char (*p)[256];</span> char *p2; <span class="red11">p = &name;</span> p2= name; <span class="red11">printf("%p -> %p\n", p, p+1);</span> printf("%p -> %p\n",p2,p2+1); return 0; } |
1 2 3 4 |
実行結果 0012FE84 -> 0012FF84 0012FE84 -> 0012FE85 |
基本的に、こんな書き方やめましょう。
「エラーが出ないから」と反論する人はプログラマーを辞めてください。
こんなものがエラーも出ずに動いてしまうため、「C言語は難しい」と思う原因の一つでしょう。
ちなみにJISX3010には、次のように書いてあります。
- プログラマを信頼する。
- プログラマが必要である事柄を行おうとすることを妨げない。
- 言語は小さく、コンパクトに保つ。
- 一つのオペレーションには唯一の方法を割り当てる。
- たとえ可搬性が保証されない方法であったとしても、
実行効率を上げる余地を残しておく。【訳】In the Spirit of C(C の精神)
artima - In the Spirit of C
つまりC言語は、プログラマ任せの言語ってこと。
そのためOS開発や組み込み開発で使用されたり、CGIとして利用したり・・・・と、長い間、開発現場の先頭を走ってこれた言語なのです。
2005年07月07日(木) ・・・・
C言語研修のレベルが想像以上に高いです。
なにより、一緒に研修を受けている受講生のうち、ソフトウェア開発者は3名程度なのに、他の専門者の数十人も普通に理解しています。
講師「C言語が書けるというなら、printf関数程度は書けないと話にならんぞぉ!」
講師「この会社で生きていきたいなら、最適なアルゴリズムを洗練された書法で実現しろぉ!」
講師「世界一エレガントで、可読性・メンテナンス性によいプログラムが書けね~奴は、どうせ首だべ?」
この研修を取らなかった私は本当に井の中の蛙です。
てか、プログラムレベルも全く通用しないのか・・・ここでは・・・
2005年07月06日(水) トランジスタ
このままでは、将来がとてもやばいので、同僚に聞いて「トランジスタ技術4月号」を購入しました。
付録がついていました。
R8C/15(R5F21154SP)
・・・・・
なにをするものかすら分かりません・・・・
◇
ご丁寧に、日記の日付が間違っていると数名から連絡を頂きました。
頭の処理速度や、優先度の高い仕事の割り込み処理で、私のソフトウェア・タイマが狂っていたようです。
ハードウェア・タイマの重要性が分かります。それでもタイマ分解能1単位くらいの誤差があるそうです・・・
知らんわ、そんなもん・・・