アカウント名:
パスワード:
すぐに同様のコメントがつくと思いますが、一応、一番乗りってことで。
#define HOGE_1 1#define HOGE_2 2
というような定義を見たことも書いたことも書かれたこともあります。おはずかしながら。
それはそうと、この引数のサイズは数値と等価なのでしょうか? これが配列の長さや画像の大きさやファイルサイズなどであれば、memcpy と同じような意味で、数字を渡していいと思います。
しかし、4種類しかないということは、数字としての「サイズ」ではなく、もっと抽象的な意味でのサイズなのではないかと思います。もしこれが、「大中小」とか、なにかそういった「サイズという名前のなにかの種類」
コメントありがとうございます。
今回の場合は、「数値としてのサイズ」を意図しています。例えば、バイト数とか。
実際に指定したいのが数値そのものでは無く、何かの種類であるような場合は、勿論 define であったり typedef enum にすべきと思います。
個人的には、 (型を適切に定義できるのであれば) typedef enum を使う方が、不適切な値に対し warning が出る (コンパイラにも依るかもしれませんが) のでユーザーにも優しい分良いかな、と思います。
typedef enum { TSURUPETA, BOIN} pi_t; int find_girl(pi_t pi, ...);
みたいな。
引数がただの数値であるなら、確かにそのまま数値でいいでしょう。4種類というのは数値としては変な感じがするので、例で出されると違和感が大きいです。裏の意味を勘繰ってしまいます。
例の分かりにくさは置いておくと、引数の数値に有効範囲があるってだけなら、ほかのコメントのように assert かなあ。どんな数値が渡されても内部で有効な数値に解釈して実行を続けるのであれば、解釈した数値を return してもいいと思います。8以上なら8をセットして return 8; と。
例の分かりにくさをまた戻すと、引数がただの数値であるなら、呼ぶ方だって、set(1);とか set(2); とは書かないでしょう。set(sizeof(int)); というような書き方になるだろうから、define どころか、enum の定義が必要になるという時点でおかしいです。この例の中では、やはり数値ではなくなにかしらの「種類」(とか「意味」とか)を与えているように思えますねえ。たまたま数字としても意味が通ってしまうのだけど、といった感じで。
あ、種類であるなら define より enum というのは分かりますよ。コンパイラに警告してもらった方が確実ですから。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
「サイズ」というものの抽象的な意味 (スコア:0)
すぐに同様のコメントがつくと思いますが、一応、一番乗りってことで。
というような定義を見たことも書いたことも書かれたこともあります。おはずかしながら。
それはそうと、この引数のサイズは数値と等価なのでしょうか? これが配列の長さや画像の大きさやファイルサイズなどであれば、memcpy と同じような意味で、数字を渡していいと思います。
しかし、4種類しかないということは、数字としての「サイズ」ではなく、もっと抽象的な意味でのサイズなのではないかと思います。もしこれが、「大中小」とか、なにかそういった「サイズという名前のなにかの種類」
Re:「サイズ」というものの抽象的な意味 (スコア:1)
コメントありがとうございます。
今回の場合は、「数値としてのサイズ」を意図しています。例えば、バイト数とか。
実際に指定したいのが数値そのものでは無く、何かの種類であるような場合は、勿論 define であったり typedef enum にすべきと思います。
個人的には、 (型を適切に定義できるのであれば) typedef enum を使う方が、不適切な値に対し warning が出る (コンパイラにも依るかもしれませんが) のでユーザーにも優しい分良いかな、と思います。
みたいな。
Re:「サイズ」というものの抽象的な意味 (スコア:1)
引数がただの数値であるなら、確かにそのまま数値でいいでしょう。4種類というのは数値としては変な感じがするので、例で出されると違和感が大きいです。裏の意味を勘繰ってしまいます。
例の分かりにくさは置いておくと、引数の数値に有効範囲があるってだけなら、ほかのコメントのように assert かなあ。どんな数値が渡されても内部で有効な数値に解釈して実行を続けるのであれば、解釈した数値を return してもいいと思います。8以上なら8をセットして return 8; と。
例の分かりにくさをまた戻すと、引数がただの数値であるなら、呼ぶ方だって、set(1);とか set(2); とは書かないでしょう。set(sizeof(int)); というような書き方になるだろうから、define どころか、enum の定義が必要になるという時点でおかしいです。この例の中では、やはり数値ではなくなにかしらの「種類」(とか「意味」とか)を与えているように思えますねえ。たまたま数字としても意味が通ってしまうのだけど、といった感じで。
あ、種類であるなら define より enum というのは分かりますよ。コンパイラに警告してもらった方が確実ですから。
LIVE-GON(リベゴン)
Re:「サイズ」というものの抽象的な意味 (スコア:1)
で、仕様案を出したところ、『引数に特定の値だけが指定可能な場合は全部 define しなさい』と上の上の方から指示されたわけです。
『define にしなさい』という意図は (おそらく)『呼出元が他の値を誤って指定するのを避けたい』ということだから、「あえてその意図を汲むなら (不自然ではあるけれど) typedef enum にするしかないよなぁ…」と考えたのが、最後の typedef enum とする例に繋がっていたのでした。