アスキーより刊行されている「入門 C言語」を読んで勉強してますが…
この本での勉強でわからないところが出て来てしまいました。
この本の6章4節に「文字列を検索するプログラムと言うのがありますが、まずこのプログラムの冒頭で
#define HTAB 0x09
とした上で、同プログラムの72、73行目にてタブコードを探して埋め込むと言う処理を行っています。
私がわからないのはまず、 HTABを0x09に置き換える処理をプログラムの冒頭にて行っていますが、単語をHTABではなく単にABCだとか他の言葉で行ってはだめなのだろうか?と言う事と、そして何故、わざわざタブコードを探して埋め込むと言う処理を必要とするのだろうか?と言ったこの二点です。
プログラムの他の部分は理解出来ましたがこの二点の理屈のみだけは理解が出来ず、立ち止まってしまいました。
どなたかこの本に目を通された事があってメカニズムを説明出来る方がおられましたらどうか御回答の程をお願いします。
No.3ベストアンサー
- 回答日時:
その本を読んだのがずいぶん前ですが。
> HTABを0x09に置き換える処理
ここが問題ですが、「逆」です。0x09をHTABとしています。ABCと置きたければそれでもOKです、他の人の可読性は落ちますけどね。
> わざわざタブコードを探して埋め込むと言う処理
プログラムする上で0x09を判定する必要がある、ということです。
HTABはホリゾントTABです。文字列内に埋め込むと、文字列をEXCELなどに貼り付けると複数のセルに分割されて入る、などの制御に用いられます。
「改行(0x0D、0x0A)」も制御文字です。
少ないうちは0x09が何を意味するか、覚えているかもしれませんが、数が増えると何がなにやらわからなくなりますよ。
それを防ぐ意味で文字で表現するわけです。
例として、性別判定で男女を数字一桁で表現する、という仕様があるとしましょう。
if(gender==1){ は男ですか?女ですか?
define で
#define MAIL 1
#define FEMAIL 2
としておけば、ソースを読みやすくできますよね。
なるほど、ホリゾントTABと言うのは初めて知りました。
改行(0x0D、0x0A)もまた制御文字と言うのもやはり初めて知ります。
実はあの本のプログラムのタブコードの埋め込み処理部の所は何が何やらと考えていたのですが、そちら様の示して下さったソースで理解が進みました。
ありがとうございます。大きな参考になります、これは。
No.5
- 回答日時:
#2>直接0x09で処理してしまってもまた良いと言う事ですよね
#2でも言ってるように、直接処理しても良いです。
でも、このように、何らかの識別子を付けておくことは意味のあることです。
プログラム中で、0x09 というものを見つけたときには、プログラム上はそれは単なる16進記法で表された9という数字にしかなりません。
HTAB と名前を付けてやれば、それが、タブコードを意味するということがわかり(プログラムを読む人にとって)単なる数字ではなくなります。
プログラム中に0x09 の様な数字が散りばめられている場合、
それが、全てTAB を表すとは、限りませんので、
(タブコードが)違うシステム上の機械にプログラムを移植しようとするような場合、には、単純に0x09 を置き換えるだけではなく、それぞれの部分の解読をしないといけなくなります。
そのような場合にも、冒頭で、HTAB は、0x09 にプリプロセッサで置き換えるというような指示がしてあれば、
プログラマは、冒頭部分を置き換えるだけで済みます。
このように、名前を付けるということには、物事を抽象化する意味があります。
そうですね、やはり直接0x09で処理を行うよりはここはプリプロセッサによる置き換えの方が全体的な面から見て効率が良いとそう言う事ですね。
確かに0x09がソース上にいくつもある場合は常にTABを示すわけではありませんね。そんな意味でもプリプロセッサによる置き換え処理はやはり大切なものなのでしょうね。
この点におきましては概ねこれで納得出来ました。
先程と重ねて改めてお礼を述べさせて頂きます。
No.4
- 回答日時:
#1さん#2さんと言っている事は同じです。
ABCという名前を付けても文法的には正しいので間違いとは言えません。
しかし、次の2点から好ましくありません。
1 1年後にあなたがこのプログラムを見直した時
2 共同作業などで他の人があなたのプログラムを見る事がある場合
1年後の自分はほとんど他人です。プログラムを作って数ヶ月はABCという変数がタブコードである事を覚えているでしょうが1年後まで覚えている自信はありますか?
もし、覚えているとしても他の人に見せる事になった場合にタブコードをHTABではなくABCにした理由を合理的に説明できますか?
処理に関しては本を持っていないので他の方の説明を待ちましょう
そうですね、確かにプログラムを書いて時が経ったらその内容を詳しく覚えている自信はないですね。
また、確かにソースコードを人に見せるなら他人が見てわからないような語句が使われていたならそれを問われるや言葉に詰まるかも知れません。ここはプログラムを組む際の人間同士の間の話と言えばそうですが、共同作業の事までは考えてはいませんでしたね…
ただ、ご説明されている所は当然とわきまえておく一つの常識と受け止めておきますね。
No.2
- 回答日時:
>単語をHTABではなく単にABCだとか他の言葉で行ってはだめなのだろうか?
もちろん他の言葉でもいいです。
でも
単にABC としたのでは、プログラム中で意味が読み取れないので
ABC とする意味はない(反って0x09の方がまだマシ)と思います。
識別にはプログラマが意図する意味を表す名前を付けた方が可読性があがります。
もう一つの疑問については、そのプログラムがわかりませんのでわかりません。
お答えありがとうございます。
言葉をABCとする意味はないとおっしゃっていますが、
そうなりますと直接0x09で処理してしまってもまた良いと言う事ですよね。とりあえずはそこを考えた上でプログラムを見直して見ようかと思います。
No.1
- 回答日時:
自分で好きな名前にしてもいいが、
他人も自分が後から見ても理解しやすすくする必要がある。
0x09を直接書いても、勝手だが、
ソースの流用、デバッグするとき判りやすい物がより。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CPUの問題について 2 2022/07/09 12:04
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- その他(社会・学校・職場) 平均的日本人の頭は悪くはないはずですし、学校で習う内容が幼稚というわけでもないのに、世間には幼稚な大 7 2023/04/05 20:51
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- 大学受験 3浪しようと思うので、アドバイスお願いします。 自分としては結構メンタルきつくて後期でいいから、東京 3 2023/02/13 21:47
- C言語・C++・C# C言語について。 3 2022/11/05 20:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初級者の質問――time_tについて
-
Arduino nano(アルドゥイーノ ...
-
Webプログラムってネイティブア...
-
vba listviewにおけるtextのAli...
-
C言語primeについて
-
VBA
-
プログラムのコーディングって...
-
プロダクションコードとは?
-
アプリ終了時にタスクトレイか...
-
c言語のサイコロを100回振って...
-
掃き出し法の計算誤差について
-
指定したフォルダーを最前面表...
-
ソケット通信プログラムのヘッ...
-
MPLABでビルドできない・・・
-
3層の階層型ニューラルネット(...
-
openGLで物体を半透明にして表...
-
processingで雪が積もるような...
-
yahooに接続後メールにログイン...
-
数独をとくプログラム
-
世界一美しいソースコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
プロダクションコードとは?
-
指定したフォルダーを最前面表...
-
Webプログラムってネイティブア...
-
COBOLのS9タイプからXタイプへ...
-
VBコンソールアプリ(.NET Frame...
-
VBA
-
2値化した画像の黒い部分のピク...
-
初級者の質問――time_tについて
-
無限ループ中にある任意のキー...
-
Arduino nano(アルドゥイーノ ...
-
世界一美しいソースコード
-
VBAにてTIFFから画像を取込みた...
-
C言語でpingを実行してその結果...
-
三次元のグラフを書きたいので...
-
マイコンからプログラムを読み...
-
XPathの関数「text()="value"」...
-
C言語→MATLABへの変換で、困っ...
-
URLの最初の「h」を略す
-
プログラミングの問題と解答例...
おすすめ情報