我的文件太多,如
[Section]
[Section.Ia32]
[Section.x64].... so more
所以,我需要定义单个宏来解析文件时我们可以使用一个宏来获取该部分。目前我正在尝试,
#define APattern = "(^(\\s)*\\[Section(\\.\\w+)*\\])";
它已成功编译......但它无法正常工作。
例如
CString a = Section;
a.compareNoCase(APattern);
它不起作用..
谢谢
答案 0 :(得分:1)
我认为您的定义中的语法不正确。在c ++中 限定 没有
"=",
非常喜欢
#define SQR(a) (a * a).
所以在你的定义中,一个参数也缺失了。 <不要使用
";"
在行尾。 第二,您将结果作为参数传递给函数
a.compareNoCase(),
在您的定义返回哪种类型的意义上可能不正确。
答案 1 :(得分:1)
我认为你有2个问题,第一个问题,关于C宏语法,正确地通过fiscblog回答(+1)解决,另一个问题似乎是你实际上期待正则表达式匹配,这超过了CString的能力。例如,参见this answer以获得在Visual C ++中匹配的正则表达式
说实话,我会使用sscanf解决问题,或多或少像
#define ASection(In, Section) (sscanf(In, " [Section(%^[)])", Section) == 1)
答案 2 :(得分:1)
使用#define粘贴名称后的所有内容。因此,对于您的示例,结果将是:
CString a = Section;
a.compareNoCase( = "(^(\\s)*\\[Section(\\.\\w+)*\\])"; );
你可以亲眼看到它是无效的语法。为了正确定义,你可以倒退:
a.compareNoCase( "(^(\\s)*\\[Section(\\.\\w+)*\\])" );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-->
#define APattern "(^(\\s)*\\[Section(\\.\\w+)*\\])"