#define宏中的特殊字符

special character in #define macro

本文关键字:特殊字符 #define      更新时间:2023-10-16

我是C++的新手,面临下面提到的一个简单问题。在visual C++2008中,我试图#定义一些类似的东西

#define fromThis*  toThisPtr
#define fromThis   toThisObj

我正在移植一些用linux编写的代码,需要根据winapi进行移植。我犯的错误像这样的东西。

 error C2008: '*' : unexpected in macro definition
 warning C4005: 'fromThis' : macro redefinition
 see previous definition of 'fromThis'

我需要在预处理期间重新定义fromThis*和fromThis。#define宏中是否不允许使用特殊字符?我如何计算出这个代码?


第1版:我正在寻找可能的解决方案。我正试图将*This更改为'toThisPtr'。一个建议的解决方案是使用typedefs。我确实喜欢下面的内容。

typedef toThisPtr   fromThis*;
typedef toThisObj   fromThis;

现在有了这个解决方案,我得到的错误是:

错误C2143:语法错误:缺少";"在"*"之前错误C2059:语法错误:";"错误C2040:"iovec":"toThisObj"与"toThisPtr"的间接级别不同

typedef能解决这个问题吗。将This*替换为ThisPtr的标准方法是什么?

#define的文档中说它的第一个参数是标识符。标识符只能包含字母、数字和下划线,并且不能以数字开头。

因此,fromThis*不是一个有效的标识符,您不能将它#define转换为其他标识符。

你真的不能这么做,也不应该这么做。:)

为此,我个人会使用typedefs而不是宏。

typedef toThisPtr fromThis*
typedef toThisObj fromThis

然后全部替换。

也许你刚刚把它向后

#define toThisPtr fromThis*
#define toThisObj fromThis

这定义了两个名为toThisPtr和toThisObj的宏。否则,我很难理解你想做什么。

不能在名称中使用*。请参阅文档摘录:

您可以将任何有效的标识符定义为宏,即使它是C关键词

有效标识符是一个或多个字母、数字或下划线字符(_)。既没有空格也没有标点符号或符号可以是标识符的一部分。只有字母、数字和单个下划线字符有效。此外,变量标识符总是要以一封信开头。