dポイントプレゼントキャンペーン実施中!

こんにちは。

VS.2005でプログラミングをしているのですがプリプロセッサで起こるエラーの対策が分からずに
悩んでいます。
エラー内容は以下のとおりです。

warning C4067: プリプロセッサ ディレクティブの後に余分な文字がありました - 改行が必要です

この状態を改善するには、/ZaコンパイラオプションがどうのこうのとMSのHPには載っていますが
どのようにやればいいのか分かりません。
以下にソースコードを載せておきます。

#ifndef _TEXT(x) // TEXTマクロを使うとこの警告が表示されるようです。
#define _TEXT(x) __T(x)
#endif

この警告を無くすにはどうしたらいいでしょうか?
よろしくお願いします。

A 回答 (4件)

#ifdef/#ifndef は, 与えられたものが「マクロとして定義されているかどうか」をテストするプリプロセッサ指令です. んで, 例えば


#define _TEXT(x) __T(x)
というプリプロセッサ指令で定義されているのはあくまで「_TEXT」なんです.

これで #1 とつながった.
    • good
    • 0
この回答へのお礼

回答ありがとうぎざいます。
プリプロセッサ命令の理解が進みました。

お礼日時:2011/08/20 14:24

コンパイラが余分な文字があることと


その場所まで教えてくれてるのだから、、、

#ifndef _TEXT // _TEXTが定義されていなければ
#define _TEXT(x) __T(x) // _TEXTを__Tとして定義する
#endif
    • good
    • 0
この回答へのお礼

上記のとおりにデバッグを行ったら警告が消えました。
ご指摘ありがとうございます。
多分、この問題は自分のプリプロセッサ命令の理解不足だと思います。

お礼日時:2011/08/19 19:13

あなたはこの #ifndef で何をしたいのですか?


#ifndef がどのような機能を持っているのかわかっていますか?

この回答への補足

#ifndef XXXはXXXが定義されていないとその先を実行するというプリプロセッサ
命令だと思います。

#ifndef _TEXT(x)というのは通じないみたいです。
まだ調べていないのですが #ifndef _TEXT(x)←引数付にして宣言するのは駄目
なようですね。 この引数の部分を取り去るとコンパイラが通りました。
単なるプリプロセッサの理解不足のような気がします。

補足日時:2011/08/19 19:11
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
実は参考書を読んでそれでプログラムを組んでいます。
しかし、その参考書で必要になるサンプルプログラム内で問題がるようで・・・
その参考書、時々プログラム部分が凡ミスして載せてあるんですよね。
自分はまだプリプロセッサ命令、IDE互換対応、OS互換対応プログラムは末体験なんで困っています。
まぁ、ただの愚痴なんですけどね。

お礼日時:2011/08/19 19:20

マクロとしては


_TEXT
じゃないか?

この回答への補足

TEXTじゃなくて_TEXTだということでしょうか?
文ば短いのでよく分からないです。
自分の質問内容は、#ifndef x を#ifndef _TEXT(x)とすると上記の警告がでるのでそれをどうすればいいのか?というこです。

あと題名にエラーとありますが警告でした。 すみません。

補足日時:2011/08/19 14:40
    • good
    • 0

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