#define宏中的特殊字符

时间:2012-07-30 05:55:44

标签: c++ windows visual-c++ macros porting

我是C ++的新手,面对下面提到的一个简单的问题。 在visual C ++ 2008中,我试图#define类似

#define fromThis*  toThisPtr
#define fromThis   toThisObj

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

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

我需要在预处理时间从此*和此重新定义。 #define宏中的特殊字符是不允许的?  我该如何处理这段代码?


EDIT-1: 我正在寻找可能的解决方案。我试图将*从这个回复到'toThisPtr'。一个建议的解决方案是使用typedef。我在下面做了。

typedef toThisPtr   fromThis*;
typedef toThisObj   fromThis;

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

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

可以typedef成为这个问题的解决方案。什么是从这个*替换为toThisPtr的标准方法?

4 个答案:

答案 0 :(得分:3)

#define的{​​{3}}表示其第一个参数是标识符。标识符只能包含字母,数字和下划线,不得以数字开头。

因此,fromThis*不是有效的标识符,您不能将#define改为其他标识符。

答案 1 :(得分:0)

也许你刚刚倒退了

#define toThisPtr fromThis*
#define toThisObj fromThis

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

答案 2 :(得分:0)

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

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

typedef toThisPtr fromThis*
typedef toThisObj fromThis

然后只需替换所有。

答案 3 :(得分:0)

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

  

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

     

有效标识符是一个或多个字母,数字或的序列   下划线字符(_)。无论是空格还是标点符号或   符号可以是标识符的一部分。只有字母,数字和单个   下划线字符有效。另外,变量标识符   总是要写一封信。