int型としては使わない定数をenumで定義してもいいでしょうか?

投稿者: Anonymous
enum { SYMBOL=100 } /* ASCII文字コードで指定する */

上記のように定数を定義していますが、SYMBOLstrtok_r()の2つめの引数として(const char*)SYMBOLの形で使用するだけです。
コンパイル時にエラーは出ないので文法的な辻褄はあっていると思うのですが、このような場合はやはりenumを使わずに下記のように定義するときに(コメントでなくプログラムとして)使用目的を明示するべきでしょうか?

const char* SYMBOL = "d";

<774RRさんからの返答を受けて主に以下の点について質問文を修正しました>
enumでまとめて定義するときはそれらが1つのグループであるかを考えるべきという視点から見るとSYMBOLは明らかに仲間外れで別に定義するほうが自然でした。
なお、SYMBOLの使用目的はstrtok_r()の2つめの引数であるdelimです。
(返答を読んで改めて調べなおしたりしているうちに、自分が”何を分かっていなかったのか”とか”どこを遠回りしていたのか”が少しづつ見えてきた気がします……。)

解決

const char* SYMBOL = (const char*) 'd';

これは、SYMBOLstrtok_r() の第2引数 delim に渡すなら、おそらく

const char* SYMBOL = "d";

ではないでしょうか。

もし、"d" と文字列で直接書くのでなく、文字コードを別に定義しておきたい、ということであれば、

/* strtok_r() の区切り文字の文字コード */
#define SYMBOL_CHARCODE 100

const char SYMBOL[2] = { SYMBOL_CHARCODE, 0 };

とすることもできます。

#define の代わりに enum を使うこともできますが、enum は 774RR さんの例にあるような一連の定数をひとまとめに定義するためのものであって、単体で(または無関係な定数と一緒に)定義するためのものではないので、ここで enum を使うことにはとても違和感を感じます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *