我想要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
你可以这样做:
#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
指令无法处理此问题。
不可以。不能像这样使用预处理器指令。您可以使用宏来连接和字符串化名称,但这是另一种情况。如果你需要这个,你很可能应该重新考虑你的设计,因为它目前还不够好。
也许我不清楚......但我看到你在问几个不同的问题......
我认为您询问是否可以包含源文件,是的,您可以,但这不是最好的主意;看到这里很好的讨论为什么。
如果您想知道使用“...”与 <...> 包含文件,区别在于引号是当文件位于本地目录中时(或者您想要包含文件的路径),<> 是当文件在您的搜索路径中时。
如果你想对文件名进行字符串化,那么 Jens Guestedt 的答案就是你想要的......但我质疑这样做背后的逻辑......
为什么不将 .c 文件正常包含在您的项目中(将其添加到您的 makefile 或其他文件中),然后将有问题的代码(或 while 文件)包装在 #ifdef 中?这是有条件地编译代码的更标准的方法。