Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 令牌粘贴操作符(###)在my C++;宏_C++_Macros_Concatenation_C Preprocessor - Fatal编程技术网

C++ 令牌粘贴操作符(###)在my C++;宏

C++ 令牌粘贴操作符(###)在my C++;宏,c++,macros,concatenation,c-preprocessor,C++,Macros,Concatenation,C Preprocessor,我在使用以下宏时遇到问题,我发现令牌粘贴操作符(#)占用了静态和返回类型之间的空间: #define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { } 因此,预处理器正在改变这一点: MY_FUNCTION(bool) 为此: staticbool MyFunction() { } 这导致了奇怪的编译错误 我想到了在static关键字周围加括号的想法: // This works but is kind of we

我在使用以下宏时遇到问题,我发现令牌粘贴操作符(
#
)占用了
静态
和返回类型之间的空间:

#define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { }
因此,预处理器正在改变这一点:

MY_FUNCTION(bool)
为此:

staticbool MyFunction() { }
这导致了奇怪的编译错误

我想到了在
static
关键字周围加括号的想法:

// This works but is kind of weird
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { }

有更好的解决方案吗?

我认为您的问题是不想在这里使用令牌粘贴。如果将宏更改为

#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }
那么如果你写

MY_FUNCTION(bool)
它将扩展到

static bool MyFunction() { }
我假设这就是您想要做的,因为我看不到您试图将
aReturnType
参数粘贴到宏上的内容


希望这有帮助

它应该怎么做?您让它将
static
bool
粘贴在一起。如果您不想这样做,而是想使用
静态bool
,那么请不要将它们粘贴在一起?

此操作员的工作描述中包含了吃空格。谢谢您的解释。我对C++宏有点生疏,忘记了我只能使用宏参数。