#define宏中的特殊字符
special character in #define macro
我是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
转换为其他标识符。
你真的不能这么做,也不应该这么做。:)
为此,我个人会使用typedef
s而不是宏。
typedef toThisPtr fromThis*
typedef toThisObj fromThis
然后全部替换。
也许你刚刚把它向后
#define toThisPtr fromThis*
#define toThisObj fromThis
这定义了两个名为toThisPtr和toThisObj的宏。否则,我很难理解你想做什么。
不能在名称中使用*。请参阅文档摘录:
您可以将任何有效的标识符定义为宏,即使它是C关键词
有效标识符是一个或多个字母、数字或下划线字符(_)。既没有空格也没有标点符号或符号可以是标识符的一部分。只有字母、数字和单个下划线字符有效。此外,变量标识符总是要以一封信开头。
- 如何用转义符替换字符串中的所有特殊字符
- 转换特殊字符(UTF-8)
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 回文,不包括特殊字符和空格
- 无法使用 Unicode 特殊字符设置窗口文本
- 使用 libmysql 插入特殊字符
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- 如何输入以特殊字符开头的字符串
- 如何使用正则表达式匹配不包含特殊字符(&、\、<、>、|、)的字符串,除非它们以反斜杠开头
- C++降低特殊字符,例如 ü
- #define宏中的特殊字符