-1

includeマクロ展開の結果が欲しい。include<>「」しか知らないらしい?

これは失敗します:

#define audio sinwave

#ifdef audio
#include audio".c"
/*#include "sinwave.c"*/
#endif

しかし、これは機能します:

#ifdef audio
        if(i==0){set_audio((char *)audio);return;}
#endif
4

3 に答える 3

2

次のようなことができます。

#define audio audio

#define FF(X) #X
#define F(X) FF(X.c)

#ifdef audio
#include F(audio)
#endif

.cつまり、すべてを文字列に配置する前に、を追加する必要があります。隣接する文字列の通常の連結"audio" ".c" -> "audio.c"は、前処理よりも後のコンパイル段階で発生するため、#includeディレクティブはこれを処理できません。

于 2012-09-22T10:44:55.577 に答える
1

いいえ。プリプロセッサ ディレクティブをこのように使用することはできません。マクロを使用して名前を連結および文字列化できますが、それは別のケースです。これが必要な場合は、現時点では十分ではないため、おそらく設計を再考する必要があります.

于 2012-09-22T09:47:10.313 に答える
0

私にはよくわからないかもしれませんが、あなたが尋ねているいくつかの異なる質問が見えます...

ソースファイルを含めることができるかどうかを尋ねていると思いますが、そうすることができますが、それは最善のアイデアではありません。その理由については、こちらを参照してください。

"..." と <...> を使用してファイルを含めることについて疑問がある場合、違いは、ファイルがローカル ディレクトリにある場合 (またはファイルへのパスを含めたい場合)、<> が引用符であるということです。ファイルが検索パスにある場合。

ファイル名を文字列化したい場合は、Jens Guestedtの答えが必要です...しかし、これを行う背後にあるロジックに疑問があります...

通常、.c ファイルをプロジェクトに含めて (makefile などに追加して)、問題のコード (または while ファイル) を #ifdef でラップしないのはなぜですか? これは、コードを条件付きでコンパイルするより標準的な方法です。

于 2012-09-22T13:29:03.590 に答える