如何在c++中定义宏模式

visual How to define a pattern in macro in C++?

本文关键字:定义 模式 c++      更新时间:2023-10-16

我有一个文件有太多的章节,比如

 [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)