マジックナンバーとは何でしょうか?
C言語でプログラムを作って見ました。
readelf -a hello | head
というコマンドを打つと一番最初の方に出てくる番号ですよね??
実際にやってみると 16進数の数字が16個出てきますね。
Linuxカーネル内に存在するelf.hを見てフォーマットを見てみました。
これはOS側が適当に割り当てる数字ではないのですか??
Googleで調べると、「マジックナンバー = 悪」、「マジックナンバー、やってはいけない」とかありますが、どういうことでしょう??
どなたか教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
readelf
などで確認できるファイルを識別するための番号を意味するマジックナンバーは下記になります。
マジックナンバー (フォーマット識別子)
プログラミングで避けた方が良いと言われているべたリテラルを示すマジックナンバーは下記になります。
マジックナンバー (プログラム)
ということで、名前は同じでも全く異なる物です。他にもプロ野球などであと何勝したら優勝になるかという数もマジックナンバーと言われますね。
投稿2016/09/21 12:57
総合スコア21733
0
ベストアンサー
マジックナンバーとは、ソースコードにベタ打ちされた数値のことです(場合によっては文字列も含みますが)。
練習等、短め(というか小さめ)のコードであれば、さほど問題になりませんが、これが生産物となると話は別です。
プログラムは「仕様」を元にコーディングされていきます。その際、定数(数値や文字列)なども規定されるわけですが、そうした定数はマクロ定義(#defineで定義)し、プログラムコードではそのマクロを書くのが定石です。
例えば、仕様に変更が入り、ある設定値が変更となりました。これがプログラムコード中にベタ打ちされていると、入っている箇所全てを修正しなければなりません。1箇所2箇所くらいはどうってことはありませんが、何箇所とあると大変ですし、修正を間違えればバグの元となります。しかし、マクロで定義しておけば修正箇所は一箇所だけで済むので、修正箇所を局所化できますし、変に修正してバグを作り込む危険性を減らすことにもなります。
そのため、プログラムコード中にそうした定数はベタ打ちとせず、マクロ定義で対応するのがよいとされています。
投稿2016/09/21 11:47
総合スコア1557
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 11:57
2016/09/21 12:06
0
「マジックナンバー = 悪」、「マジックナンバー、やってはいけない」
とかありますが、どういうことでしょう??
price = 100; amount = price * 1.08;
tax_rate = 1.08; price = 100; amount = price * tax_rate;
上のサンプルコードの「1.08」が、
一般的にプログラミングで「マジックナンバー」と呼ばれるものです。
下のように変数や定数に格納する方が良いです。
(このコードでは消費税の意味です)
なぜなら、後で何の数字だったか忘れたり、
変更されるときに探すのが大変になったりして、
書いた時は自明でも、後で保守性が落ちるからです。
投稿2016/09/21 11:45
編集2016/09/21 11:48総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 11:50
2016/09/23 05:23
2016/09/23 06:51
2016/09/23 07:01
0
マジックナンバーとは何でしょうか?
ググって調べてみましたか? こういうのがでてきますけど・・・
マジックナンバー (プログラム)
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)
投稿2016/09/21 11:46
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 13:01
2016/09/22 00:20
2016/09/22 20:06