アプリ版:「スタンプのみでお礼する」機能のリリースについて

Cの初心者なのですが、makeがうまくいきません。2種類のmakeがあって片方は通ったのですが、もう片方がsyntax errorとなります。調べた結果、初めの方はANSI規格でしたんですが、2つ目はK&Rの規格でした。この事が原因ならば、どうしたらいいでしょうか?

voidout(enum level num, char *str);
extern const char *constlevel[NUM];

の2行をヘッダーファイルに置いて、使用しています。
すると、この2行が、エラーと出るのですが,どうすればよいでしょうか?
すみませんが、教えていただけないでしょうか?
宜しくお願いします。

A 回答 (2件)

> 列挙型タグ名のlevelと変数名のlevelは混じり合わない


これはK&Rでも同じのはずです。

多分次のコードで通ると思います。

void out();
extern char *level[NUM];
    • good
    • 0

おそらく、名前空間の処理の違いだと思われます。



ANSI規格では、名前空間(識別子などの名前が混じらない範囲)が、
「gotoで使うラベル名」「構造体・共用体・列挙型タグ」
「構造体・共用体のメンバ名」「関数名や変数名などの一般識別子」
の4つに分かれます。
これによると問題のコードで、
列挙型タグ名のlevelと変数名のlevelは混じり合わない
(両方を使っても問題ない)はずなのですが、
K&R規格だと名前空間が一緒になり、エラーを起こしてしまったのでしょう。

対処法は…うーん…どっちかの名前を変えるのがいちばん単純なのですが、
それができれば悩んでないかなあ…。
しかし、名前空間が混じっている以上、変数levelを
使用すると、やっぱりコンパイルエラーになってしまうと思います。

どうしても変更できないなら、他のモジュールを中継にして
変数levelを他の変数にコピーし、
動的に(プログラムが動き出した後で)取得するとか。
もっともこれも変なやりかたですが…。
やっぱり、面倒でも、どちらかを書き換えた方がいいのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!