- ベストアンサー
プリプロセッサのエラー対策がわからない状態
- VS.2005でプログラミングをしている際に、プリプロセッサで起こるエラーの対策が分からない状態です。
- エラーメッセージは「warning C4067: プリプロセッサ ディレクティブの後に余分な文字がありました - 改行が必要です」です。
- エラーの改善には、/Zaコンパイラオプションを使用する方法があるようですが、具体的な手順がわかりません。ソースコードも記載しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#ifdef/#ifndef は, 与えられたものが「マクロとして定義されているかどうか」をテストするプリプロセッサ指令です. んで, 例えば #define _TEXT(x) __T(x) というプリプロセッサ指令で定義されているのはあくまで「_TEXT」なんです. これで #1 とつながった.
その他の回答 (3)
- gerugugu84
- ベストアンサー率37% (29/78)
コンパイラが余分な文字があることと その場所まで教えてくれてるのだから、、、 #ifndef _TEXT // _TEXTが定義されていなければ #define _TEXT(x) __T(x) // _TEXTを__Tとして定義する #endif
お礼
上記のとおりにデバッグを行ったら警告が消えました。 ご指摘ありがとうございます。 多分、この問題は自分のプリプロセッサ命令の理解不足だと思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
あなたはこの #ifndef で何をしたいのですか? #ifndef がどのような機能を持っているのかわかっていますか?
お礼
回答ありがとうございます。 実は参考書を読んでそれでプログラムを組んでいます。 しかし、その参考書で必要になるサンプルプログラム内で問題がるようで・・・ その参考書、時々プログラム部分が凡ミスして載せてあるんですよね。 自分はまだプリプロセッサ命令、IDE互換対応、OS互換対応プログラムは末体験なんで困っています。 まぁ、ただの愚痴なんですけどね。
補足
#ifndef XXXはXXXが定義されていないとその先を実行するというプリプロセッサ 命令だと思います。 #ifndef _TEXT(x)というのは通じないみたいです。 まだ調べていないのですが #ifndef _TEXT(x)←引数付にして宣言するのは駄目 なようですね。 この引数の部分を取り去るとコンパイラが通りました。 単なるプリプロセッサの理解不足のような気がします。
- Tacosan
- ベストアンサー率23% (3656/15482)
マクロとしては _TEXT じゃないか?
補足
TEXTじゃなくて_TEXTだということでしょうか? 文ば短いのでよく分からないです。 自分の質問内容は、#ifndef x を#ifndef _TEXT(x)とすると上記の警告がでるのでそれをどうすればいいのか?というこです。 あと題名にエラーとありますが警告でした。 すみません。
お礼
回答ありがとうぎざいます。 プリプロセッサ命令の理解が進みました。