- ベストアンサー
アスキー刊「入門 C言語」についての質問
アスキーより刊行されている「入門 C言語」を読んで勉強してますが… この本での勉強でわからないところが出て来てしまいました。 この本の6章4節に「文字列を検索するプログラムと言うのがありますが、まずこのプログラムの冒頭で #define HTAB 0x09 とした上で、同プログラムの72、73行目にてタブコードを探して埋め込むと言う処理を行っています。 私がわからないのはまず、 HTABを0x09に置き換える処理をプログラムの冒頭にて行っていますが、単語をHTABではなく単にABCだとか他の言葉で行ってはだめなのだろうか?と言う事と、そして何故、わざわざタブコードを探して埋め込むと言う処理を必要とするのだろうか?と言ったこの二点です。 プログラムの他の部分は理解出来ましたがこの二点の理屈のみだけは理解が出来ず、立ち止まってしまいました。 どなたかこの本に目を通された事があってメカニズムを説明出来る方がおられましたらどうか御回答の程をお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その本を読んだのがずいぶん前ですが。 > HTABを0x09に置き換える処理 ここが問題ですが、「逆」です。0x09をHTABとしています。ABCと置きたければそれでもOKです、他の人の可読性は落ちますけどね。 > わざわざタブコードを探して埋め込むと言う処理 プログラムする上で0x09を判定する必要がある、ということです。 HTABはホリゾントTABです。文字列内に埋め込むと、文字列をEXCELなどに貼り付けると複数のセルに分割されて入る、などの制御に用いられます。 「改行(0x0D、0x0A)」も制御文字です。 少ないうちは0x09が何を意味するか、覚えているかもしれませんが、数が増えると何がなにやらわからなくなりますよ。 それを防ぐ意味で文字で表現するわけです。 例として、性別判定で男女を数字一桁で表現する、という仕様があるとしましょう。 if(gender==1){ は男ですか?女ですか? define で #define MAIL 1 #define FEMAIL 2 としておけば、ソースを読みやすくできますよね。
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>直接0x09で処理してしまってもまた良いと言う事ですよね #2でも言ってるように、直接処理しても良いです。 でも、このように、何らかの識別子を付けておくことは意味のあることです。 プログラム中で、0x09 というものを見つけたときには、プログラム上はそれは単なる16進記法で表された9という数字にしかなりません。 HTAB と名前を付けてやれば、それが、タブコードを意味するということがわかり(プログラムを読む人にとって)単なる数字ではなくなります。 プログラム中に0x09 の様な数字が散りばめられている場合、 それが、全てTAB を表すとは、限りませんので、 (タブコードが)違うシステム上の機械にプログラムを移植しようとするような場合、には、単純に0x09 を置き換えるだけではなく、それぞれの部分の解読をしないといけなくなります。 そのような場合にも、冒頭で、HTAB は、0x09 にプリプロセッサで置き換えるというような指示がしてあれば、 プログラマは、冒頭部分を置き換えるだけで済みます。 このように、名前を付けるということには、物事を抽象化する意味があります。
お礼
そうですね、やはり直接0x09で処理を行うよりはここはプリプロセッサによる置き換えの方が全体的な面から見て効率が良いとそう言う事ですね。 確かに0x09がソース上にいくつもある場合は常にTABを示すわけではありませんね。そんな意味でもプリプロセッサによる置き換え処理はやはり大切なものなのでしょうね。 この点におきましては概ねこれで納得出来ました。 先程と重ねて改めてお礼を述べさせて頂きます。
- fuk22
- ベストアンサー率28% (6/21)
#1さん#2さんと言っている事は同じです。 ABCという名前を付けても文法的には正しいので間違いとは言えません。 しかし、次の2点から好ましくありません。 1 1年後にあなたがこのプログラムを見直した時 2 共同作業などで他の人があなたのプログラムを見る事がある場合 1年後の自分はほとんど他人です。プログラムを作って数ヶ月はABCという変数がタブコードである事を覚えているでしょうが1年後まで覚えている自信はありますか? もし、覚えているとしても他の人に見せる事になった場合にタブコードをHTABではなくABCにした理由を合理的に説明できますか? 処理に関しては本を持っていないので他の方の説明を待ちましょう
お礼
そうですね、確かにプログラムを書いて時が経ったらその内容を詳しく覚えている自信はないですね。 また、確かにソースコードを人に見せるなら他人が見てわからないような語句が使われていたならそれを問われるや言葉に詰まるかも知れません。ここはプログラムを組む際の人間同士の間の話と言えばそうですが、共同作業の事までは考えてはいませんでしたね… ただ、ご説明されている所は当然とわきまえておく一つの常識と受け止めておきますね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>単語をHTABではなく単にABCだとか他の言葉で行ってはだめなのだろうか? もちろん他の言葉でもいいです。 でも 単にABC としたのでは、プログラム中で意味が読み取れないので ABC とする意味はない(反って0x09の方がまだマシ)と思います。 識別にはプログラマが意図する意味を表す名前を付けた方が可読性があがります。 もう一つの疑問については、そのプログラムがわかりませんのでわかりません。
お礼
お答えありがとうございます。 言葉をABCとする意味はないとおっしゃっていますが、 そうなりますと直接0x09で処理してしまってもまた良いと言う事ですよね。とりあえずはそこを考えた上でプログラムを見直して見ようかと思います。
自分で好きな名前にしてもいいが、 他人も自分が後から見ても理解しやすすくする必要がある。 0x09を直接書いても、勝手だが、 ソースの流用、デバッグするとき判りやすい物がより。
お礼
なるほど、ホリゾントTABと言うのは初めて知りました。 改行(0x0D、0x0A)もまた制御文字と言うのもやはり初めて知ります。 実はあの本のプログラムのタブコードの埋め込み処理部の所は何が何やらと考えていたのですが、そちら様の示して下さったソースで理解が進みました。 ありがとうございます。大きな参考になります、これは。