附加到字符串宏

PoV*_*oVa 2 c macros

我有一个程序,根据编译时定义提供不同的功能.我定义OPT_STRING了包含所有可能的命令行参数(用于getopt_long).我一直在寻找一个聪明的根据编译时定义来改变它的定义.我想出了这个:

#define OPT_STRING "haspvb"

#ifdef HAVE_WIFI
#define OPT_STRING OPT_STRING "mw" // => "haspvb" "mw"
#endif // HAVE_WIFI

#ifdef HAVE_IMEI
#define OPT_STRING OPT_STRING "i" // => "haspvb" "mw" "i" or "haspvb" "i"
#endif // HAVE_IMEI
Run Code Online (Sandbox Code Playgroud)

但是,这会导致编译错误:

error: "OPT_STRING" redefined
Run Code Online (Sandbox Code Playgroud)

是否有某种"宏观魔法"来实现我想要做的事情?

Som*_*ude 7

你不能"追加"到宏,这根本不可能.

作为一种可能的解决方案,您可以定义不同的宏,然后将它们一起用于定义最终的OPT_STRING宏:

#define OPT_STRING_BASE "haspvb"

#ifdef HAVE_WIFI
#define OPT_STRING_WIFI "mw"
#else
#define OPT_STRING_WIFI
#endif // HAVE_WIFI

#ifdef HAVE_IMEI
#define OPT_STRING_IMEI "i"
#else
#define OPT_STRING_IMEI
#endif // HAVE_IMEI

#define OPT_STRING (OPT_STRING_BASE OPT_STRING_WIFI OPT_STRING_IMEI)
Run Code Online (Sandbox Code Playgroud)