<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>address of local variable returned warning</title>
		<link>http://www.allegro.cc/forums/view/552652</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 19 Dec 2005 18:46:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi there!</p><p>[Warning] address of local variable `coords&#39; returned </p><p>I&#39;m having this warn from compiler. I need to have a function returning 2 values, so (as a newbie) i did this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> <span class="k3">*</span>get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> coords<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> coords<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

So then i could set a variable to *coords and *(coords+1). Is it bad idea?<br />I&#39;m having one of those stupid bugs that are a pain to find could it be because of this?</p><p>Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ricardo Santos)</author>
		<pubDate>Wed, 14 Dec 2005 13:14:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>coords is a reference (or is it a pointer?) put in the stack and is removed when the function returns. Make it an array and return the adress or put it in a a struct and return normally. The struct is prolly easier as you dont have to free it afterwards. </p><p>EDIT: oh and you could also add (oslt)
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <span class="k3">&amp;</span>coords<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Wed, 14 Dec 2005 13:17:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
int &amp;coords[2]
</p></div></div><p>
Or else just:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <span class="k3">*</span>coords<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Or, to make absolutely sure the array you pass has at least 2 members:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <span class="k3">*</span>coords, <span class="k1">int</span> num_coords<span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>num_coords <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Wed, 14 Dec 2005 16:49:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or return a int pointer with the address of your parameter, like </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> <span class="k3">*</span>get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <span class="k3">*</span>coords<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> coords<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Or just declare the array as static:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> <span class="k3">*</span>get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">static</span> <span class="k1">int</span> coords<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>

   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> coords<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Wed, 14 Dec 2005 19:19:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow, so many ways!</p><p>Ok, thanks guys
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ricardo Santos)</author>
		<pubDate>Wed, 14 Dec 2005 20:36:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s another one.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span>
<span class="k2">{</span>
   <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="k2">}</span>COORDS<span class="k2">;</span>

COORDS get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span>
   COORDS coords<span class="k2">;</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords.x <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords.y <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> coords<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul Pridham)</author>
		<pubDate>Wed, 14 Dec 2005 20:56:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>WHAT???  coords is a local stored on the stack, when the function returns a hardware interrupt could blow it away before you use it.  It needs to be static at least.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Thu, 15 Dec 2005 01:35:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The returned value is a copy in this case.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Thu, 15 Dec 2005 01:39:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Exactly. You return by value, just like you&#39;d return an int. An &quot;interrupt&quot; that happens while in the function isn&#39;t a problem anyway, because the intr code restores the stack after execution, and jumps back to the exact same place in your function. Your code won&#39;t even notice.<br />However, if speed is a concern, then returning by value (for anything larger in size than a pointer) is usually frowned upon, for two reasons:<br />- passing readily-allocated memory space for your function to fill avoids allocating temporary memory space<br />- you avoid the stack access overhead for allocating the local variable<br />- you only pass a single pointer (4 bytes on 386+ cpu&#39;s) once, instead of returning the full-blown structure (in this case 8 bytes, but can be a lot more with larger structs or arrays)</p><p>And for the fun of it, here&#39;s another solution (C++ only):
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> COORDS <span class="k2">{</span>
   <span class="k1">int</span> x, y<span class="k2">;</span>

<span class="c">// should probably provide some ctors here...</span>

COORDS<span class="k3">&amp;</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   x <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   y <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sat, 17 Dec 2005 18:47:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s another way, the simplest and the better:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <span class="k3">*</span>x, <span class="k1">int</span> <span class="k3">*</span>y<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   <span class="k3">&amp;</span>x <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k3">&amp;</span>y <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
From tobias post you can absolutely figure this out, but it&#39;s the easier and cleaner way.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felipe Maia)</author>
		<pubDate>Sat, 17 Dec 2005 19:24:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cleanest way, imo, is this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span>
<span class="k2">{</span>
   <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="k2">}</span>COORDS<span class="k2">;</span>

COORDS<span class="k3">*</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num, COORDS<span class="k3">*</span> coords<span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>coords<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   coords-&gt;x <span class="k3">=</span> <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   coords-&gt;y <span class="k3">=</span> <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
   <span class="k1">return</span> coords<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
This way, you pass one pointer instead of 2. The speed difference is absolutely negligible, but since it comes for free, <b>and</b> renders cleaner code, might as well use it. But what Felipe said is good too.<br />Of course, in C++ you&#39;d use references instead of the pointer and get rid of the assert (since C++ will slap you anyway if you manage to create a NULL reference).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sat, 17 Dec 2005 19:38:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yet another <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" /> C++ way:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> Coords
<span class="k2">{</span>
   Coords<span class="k2">(</span><span class="k1">int</span> lx<span class="k2">;</span> <span class="k1">int</span> ly<span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>lx<span class="k2">)</span>, y<span class="k2">(</span>ly<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
   <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

Coords<span class="k3">*</span> get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span>
   <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
   <span class="k1">return</span> <span class="k1">new</span> Coords<span class="k2">(</span><span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span>, <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Sun, 18 Dec 2005 01:57:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>New, but not better, nor safer. You&#39;ll be leaking memory all over before you know what hit you...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 18 Dec 2005 02:39:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll be making segmention faults if you use C/C++ before you know what hit you... Use VisualBasic if you&#39;re unable to write good C/C++ code. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Sun, 18 Dec 2005 02:45:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nah, he&#39;s not accessing unallocated memory, he&#39;s allocating memory without freeing it. Leak, not segv. And may I suggest BASIC?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 18 Dec 2005 02:47:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know. I&#39;m saying that to write good C/C++ you need to follow some rules. Otherwise you&#39;ll end up with a leaking and segfaulting code. Memory leaks and segfaults are the consequences of the same cause - lack of coding discipline. You can&#39;t say don&#39;t use dynamic memory allocation because your memory will leak. But you can say not to use it if not necessary, like here <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Sun, 18 Dec 2005 02:57:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There have been written 11 (!) solutions for this problem!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Faerber)</author>
		<pubDate>Sun, 18 Dec 2005 03:17:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s one in Forth:</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">:</span> get_gif_coords 
  <a href="http://www.delorie.com/djgpp/doc/libc/libc_281.html" target="_blank">dup</a> <span class="n">30</span> <span class="k3">/</span> 
  swap <span class="n">30</span> mod 
  TILE_H over <span class="k3">*</span> <span class="k3">+</span> <span class="n">1</span><span class="k3">+</span>
  swap TILE_W over <span class="k3">*</span> <span class="k3">+</span> <span class="n">1</span><span class="k3">+</span>
<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul Pridham)</author>
		<pubDate>Sun, 18 Dec 2005 04:42:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
There have been written 11 (!) solutions for this problem!
</p></div></div><p>
Hah, and we&#39;re only just getting started!
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> COORDS <span class="k2">{</span></td></tr><tr><td class="number">2</td><td>  public:</td></tr><tr><td class="number">3</td><td>    COORDS<span class="k2">(</span>_x, _y<span class="k2">)</span><span class="k2">:</span> x<span class="k2">(</span>_x<span class="k2">)</span>, y<span class="k2">(</span>_y<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span></td></tr><tr><td class="number">4</td><td>    COORDS<span class="k2">(</span><span class="k2">)</span><span class="k2">:</span> x<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>, y<span class="k2">(</span><span class="n">0</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">class</span> COORD_BUILDER <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  public:</td></tr><tr><td class="number">10</td><td>    COORDS <span class="k1">operator</span><span class="k2">(</span><span class="k2">)</span> <span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>      <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      <span class="k1">return</span> COORDS <span class="k2">(</span></td></tr><tr><td class="number">14</td><td>       <span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span>,</td></tr><tr><td class="number">15</td><td>       <span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>COORDS get_gif_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>  COORD_BUILDER cb<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  <span class="k1">return</span> cb<span class="k2">(</span>num<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Now if this isn&#39;t bloated...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 18 Dec 2005 07:54:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What, no STL? <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul Pridham)</author>
		<pubDate>Sun, 18 Dec 2005 10:51:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You asked for it:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>vector<span class="k3">&lt;</span>int&gt; get_coords<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>  vector<span class="k3">&lt;</span>int&gt; result<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> num<span class="k3">/</span><span class="n">30</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">int</span> col <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  </td></tr><tr><td class="number">11</td><td>  result.push_back<span class="k2">(</span><span class="k2">(</span>TILE_W<span class="k3">*</span>col<span class="k2">)</span><span class="k3">+</span>col<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  result.push_back<span class="k2">(</span><span class="k2">(</span>TILE_H<span class="k3">*</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">)</span><span class="k3">+</span><a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 18 Dec 2005 17:24:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Another STL (probably less overhead than vector)
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;utility&gt;</span>

std::pair<span class="k3">&lt;</span><span class="k1">int</span>,int&gt; get_coord<span class="k2">(</span><span class="k1">int</span> num<span class="k2">)</span> 
<span class="k2">{</span>
   <span class="k1">return</span> std::pair<span class="k3">&lt;</span><span class="k1">int</span>,int&gt;<span class="k2">(</span>num<span class="k3">/</span><span class="n">30</span>, num%<span class="n">30</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

<a href="http://www.boost.org">Boost.org</a> Tuple
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include "boost/tuple/tuple.hpp"</span>

boost::tuples::tuple<span class="k3">&lt;</span><span class="k1">int</span>, int&gt; get_coord <span class="k2">(</span> <span class="k1">int</span> num <span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">return</span> boost::tuples::make_tuple<span class="k2">(</span>num<span class="k3">/</span><span class="n">30</span>, num%<span class="n">30</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Yet another possibility (assuming int is exactly half the size of a long, bitwise).  This should work, but it would definately be a bad idea, portability-wize.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">long</span> get_coord <span class="k2">(</span> <span class="k1">int</span> num <span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">unsigned</span> <span class="k1">long</span> ret <span class="k3">=</span> num%<span class="n">30</span><span class="k2">;</span>
    ret <span class="k3">=</span> ret <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">32</span><span class="k2">;</span>
    ret <span class="k3">=</span> ret <span class="k3">|</span> <span class="k2">(</span>num<span class="k3">/</span><span class="n">30</span><span class="k2">)</span><span class="k2">;</span>

    <span class="k1">return</span> ret<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

These are all untested, but just thought I&#39;d put up some more options...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Carrus85)</author>
		<pubDate>Mon, 19 Dec 2005 03:35:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I always thought that a on most 32 bit systems, an int is the same as a signed long.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 19 Dec 2005 18:46:46 +0000</pubDate>
	</item>
</rss>
