<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>CppCheck regexp</title>
		<link>http://www.allegro.cc/forums/view/617873</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 01 Jul 2019 11:16:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p>for my latest project I am trying to customize CppCheck by defining some additional analysis rules. But I have some problems with the regexp used by CppCheck. For example, I want to search for this expression:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> f <span class="k3">=</span> <span class="n">1982</span><span class="k2">;</span>
</pre></div></div><p>

I have written the following regexp (which I have successfully tested in an online regexp tester):
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span><span class="k2">(</span>\s<span class="k3">+</span><span class="k2">)</span><span class="k2">(</span>\w<span class="k3">+</span><span class="k2">)</span><span class="k2">(</span>\s<span class="k3">*</span><span class="k2">)</span><span class="k3">=</span><span class="k2">(</span>\s<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>\d<span class="k3">+</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

When running CppCheck, the C expression above is not found. Any advices or suggestions?</p><p>Thanks in advance
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Adrian)</author>
		<pubDate>Thu, 27 Jun 2019 14:26:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll need to show us the CppCheck code you&#39;re using. It could be a simple mistake in something else.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 27 Jun 2019 20:51:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is the rule XML file I use:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">&lt;</span>?xml version<span class="k3">=</span><span class="s">"1.0"</span>?<span class="k3">&gt;</span>
<span class="k3">&lt;</span>rule version<span class="k3">=</span><span class="s">"1"</span><span class="k3">&gt;</span>
  <span class="k3">&lt;</span>pattern&gt;float<span class="k2">(</span>\s<span class="k3">+</span><span class="k2">)</span><span class="k2">(</span>\w<span class="k3">+</span><span class="k2">)</span><span class="k2">(</span>\s<span class="k3">*</span><span class="k2">)</span><span class="k3">=</span><span class="k2">(</span>\s<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>\d<span class="k3">+</span><span class="k2">)</span><span class="k2">;</span><span class="k3">&lt;</span><span class="k3">/</span>pattern&gt;
  <span class="k3">&lt;</span>message&gt;
    <span class="k3">&lt;</span>id&gt;intToFloatAssignment<span class="k3">&lt;</span><span class="k3">/</span>id&gt;
    <span class="k3">&lt;</span>severity&gt;error<span class="k3">&lt;</span><span class="k3">/</span>severity&gt;
    <span class="k3">&lt;</span>summary&gt;Do <span class="k1">not</span> assign <span class="k1">int</span> values to a <span class="k1">float</span> variable.<span class="k3">&lt;</span><span class="k3">/</span>summary&gt;
  <span class="k3">&lt;</span><span class="k3">/</span>message&gt;
<span class="k3">&lt;</span><span class="k3">/</span>rule&gt;
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Adrian)</author>
		<pubDate>Fri, 28 Jun 2019 10:39:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t think it will work because cppcheck pre-processes the source first - if you have an example file <span class="source-code">example.c</span></p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> f<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
 <span class="k1">float</span> var <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

and run <span class="source-code">cppcheck <span class="k3">-</span><span class="k3">-</span>rule<span class="k3">=</span><span class="s">".+"</span> example.c</span> you will see it is processed to </p><div class="source-code snippet"><div class="inner"><pre><span class="k2">[</span>example.c:1<span class="k2">]</span><span class="k2">:</span> <span class="k2">(</span>style<span class="k2">)</span> found <span class="s">' void f ( ) { }'</span>
</pre></div></div><p>
i.e. it&#39;s removed that statement altogether! Hence your regex will never match.</p><p>(that technique is taken from <span class="source-code">writing-rules-1.pdf</span> in <a href="https://sourceforge.net/projects/cppcheck/files/Articles/">https://sourceforge.net/projects/cppcheck/files/Articles/</a>)</p><p>I don&#39;t know if there&#39;s a way to work around it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 28 Jun 2019 15:44:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the hint. The output of CppCheck is quite strange. The expression &#39;float f = 123;&#39; seems only to be supressed if a C type is used. When I define a local variable with a custom data type the content of the function &#39;foo&#39; is shown in the output.</p><p>Example 1:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">int</span> f <span class="k3">=</span> <span class="n">1982</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Output:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">[</span>testsnippets2.cpp:1<span class="k2">]</span><span class="k2">:</span> <span class="k2">(</span>style<span class="k2">)</span> found <span class="s">' int foo ( ) { }'</span>
</pre></div></div><p>

Example 2:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
  bar f <span class="k3">=</span> <span class="n">1982</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Output:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">[</span>testsnippets2.cpp:1<span class="k2">]</span><span class="k2">:</span> <span class="k2">(</span>style<span class="k2">)</span> found <span class="s">' int foo ( ) { bar f ; f = 1982 ; }'</span>
</pre></div></div><p>

Maybe I should try another more reliable code analyser (e.g. Clang).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Adrian)</author>
		<pubDate>Mon, 01 Jul 2019 11:16:20 +0000</pubDate>
	</item>
</rss>
