如何在c++中定义宏模式
visual How to define a pattern in macro in C++?
我有一个文件有太多的章节,比如
[Section]
[Section.Ia32]
[Section.x64].... so more
所以,我需要在解析文件时定义单个宏,我们可以使用一个宏来获取该部分。目前我正在尝试,
#define APattern = "(^(\s)*\[Section(\.\w+)*\])";
编译成功…
例如 CString a = Section;
a.compareNoCase(APattern);
it is not working.
谢谢
我认为你定义的语法是不正确的。在c++中定义没有
"=",
like
#define SQR(a) (a * a).
所以在你的定义中也缺少一个参数。不要使用
";"
在行尾。其次,将结果作为参数传递给函数
a.compareNoCase(),
定义返回的类型的含义可能不正确。
使用#define在名称之后的所有内容。因此,对于您的示例,结果将是:
CString a = Section;
a.compareNoCase( = "(^(\s)*\[Section(\.\w+)*\])"; );
您可以自己看到它是无效的语法。要获得正确的定义,您可以向后看:
a.compareNoCase( "(^(\s)*\[Section(\.\w+)*\])" );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-->
#define APattern "(^(\s)*\[Section(\.\w+)*\])"
我认为你有2个问题,第一个,关于C宏语法,正确地解决了由财经博客回答(+1),另一个是,似乎你实际上是期待一个正则表达式匹配,这是在CString功能。在Visual c++
中获得正则表达式匹配的示例答案如果是真的,我会使用sscanf来解决问题,或多或少像
#define ASection(In, Section) (sscanf(In, " [Section(%^[)])", Section) == 1)
相关文章:
- 用户定义的文本运算符(在原始模式下)存在问题
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- 标准库中的任何正则表达式语法是否支持 (?(定义)用于子模式参考?
- 如何在已定义的名称模式上循环
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- 工厂模式和单例模式:未定义的引用
- 是否未在追加模式下定义 tellp()
- 是已定义的流的实现的默认模式
- 自定义分配器仅在VS 2015中的发布模式下编译
- 实现工厂模式时虚拟功能的多重定义
- 错误:在 C++ 中实现接口模式时未定义对 typeinfo 的引用
- SDL1 -> 使用自定义屏幕模式类构建 SDL2 分辨率列表
- 模板化的使用是否为具有自定义键的unordered_map/set创建了一个良好的模式
- 使用自定义模式进行序列化,并使用Boost进行随机访问
- Docker远程API JSON模式定义
- 用户定义的字符串文字和模式与sscanf匹配
- 使用模式定义从 Solidworks 读取副实体文本 *.x_t 文件
- 与 IE 保护模式兼容的自定义工具栏
- 是否有自定义内存分配器设计模式不在其分配中存储元数据
- DB2用户定义的函数和自定义模式