我正在尝试编写一个程序,其中一些函数的名称依赖于某个宏变量的值,宏如下:
#define VARIABLE 3
#define NAME(fun) fun ## _ ## VARIABLE
int NAME(some_function)(int a);
Run Code Online (Sandbox Code Playgroud)
不幸的是,宏NAME()将其转化为
int some_function_VARIABLE(int a);
Run Code Online (Sandbox Code Playgroud)
而不是
int some_function_3(int a);
Run Code Online (Sandbox Code Playgroud)
所以这显然是错误的方式.幸运的是,VARIABLE的不同可能值的数量很小所以我可以简单地做一个#if VARIABLE == n并单独列出所有情况,但我想知道是否有一个聪明的方法来做到这一点.
我正在尝试在宏中生成包含文件名.这在C++中应该是合法的:
#define INCLUDE_FILE "module_impl_win.hpp"
#include INCLUDE_FILE
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是一旦我尝试生成文件名就很难编译
#define INCLUDE_FILE(M) M##"_impl_win.hpp"
#include INCLUDE_FILE("module")
Run Code Online (Sandbox Code Playgroud)
实际上它给了我MSVC2010的警告
警告C4067:预处理器指令后面的意外令牌 - 期望一个newlin
但它不包括该文件.
问题是什么?我怎么能摆脱它?