<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mikeage.net &#187; C</title>
	<atom:link href="http://mikeage.net/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikeage.net</link>
	<description>mikeage.net</description>
	<lastBuildDate>Sun, 21 Nov 2010 05:03:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SerCat released</title>
		<link>http://mikeage.net/2009/04/22/sercat-released/</link>
		<comments>http://mikeage.net/2009/04/22/sercat-released/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 04:14:47 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/?p=313</guid>
		<description><![CDATA[I've released a replacement for both LogSer and ToSer called SerCat. It supports both stdin and stdout, and provides very basic terminal emulation (no arrow keys or functions keys yet).]]></description>
		<wfw:commentRss>http://mikeage.net/2009/04/22/sercat-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PingTunnel Improvements: Win32 &amp; Syslog</title>
		<link>http://mikeage.net/2009/01/12/pingtunnel-improvements-win32-syslog/</link>
		<comments>http://mikeage.net/2009/01/12/pingtunnel-improvements-win32-syslog/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 12:05:20 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2009/01/12/pingtunnel-improvements-win32-syslog/</guid>
		<description><![CDATA[For anyone interested in clever networking hacks, I strongly advise checking out ptunnel. This software package allows you to tunnel any TCP (such as SSH) over a ICMP (i.e., ping). Since even the most restrictive firewalls (whether corporate, Wifi (don't steal...) or other) usually let ICMP traffic through, this little piece of code can let [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2009/01/12/pingtunnel-improvements-win32-syslog/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Identifying Big Endian or Little Endian Progmatically</title>
		<link>http://mikeage.net/2006/10/27/identifying-big-endian-or-little-endian-progmatically/</link>
		<comments>http://mikeage.net/2006/10/27/identifying-big-endian-or-little-endian-progmatically/#comments</comments>
		<pubDate>Fri, 27 Oct 2006 09:45:18 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Endian]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/26/identifying-big-endian-or-little-endian-progmatically/</guid>
		<description><![CDATA[Most (99%+) of microprocessors available to the consumer and/or embedded market are either Big Endian or Little Endian; this almost never actually matters. However, sometimes one needs to write endian specific code. Here's how to have code identify if it's running on a big endian or little endian machine: First, a little review. When a [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/27/identifying-big-endian-or-little-endian-progmatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Duff&#039;s Device</title>
		<link>http://mikeage.net/2006/10/26/duffs-device/</link>
		<comments>http://mikeage.net/2006/10/26/duffs-device/#comments</comments>
		<pubDate>Thu, 26 Oct 2006 09:12:50 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/25/duffs-device/</guid>
		<description><![CDATA[No C programmer can call himself (or herself) a real programmer without having seen (and been amazed by) Duff's Device. It was invented as a more efficient alternative to regular loop unrolling used in copying bytes from memory to a register (each byte went to the same address in memory), by handling the case when [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/26/duffs-device/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dividing Integers (&amp; Casting Precedance)</title>
		<link>http://mikeage.net/2006/10/17/dividing-integers-casting-precedance/</link>
		<comments>http://mikeage.net/2006/10/17/dividing-integers-casting-precedance/#comments</comments>
		<pubDate>Tue, 17 Oct 2006 06:49:14 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/17/dividing-integers-casting-precedance/</guid>
		<description><![CDATA[Quiz: What does the following code print: int i,j; float k; i = 5; j = 2; k = i/j; printf("%f\n",k); That's right: 2.00000. Why? Despite the fact that we're assigning it to a floating point, the division is carried out as integer division, which drops the remainder. To properly perform floating point division, try [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/17/dividing-integers-casting-precedance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conditional Assignments</title>
		<link>http://mikeage.net/2006/10/15/conditional-assignments/</link>
		<comments>http://mikeage.net/2006/10/15/conditional-assignments/#comments</comments>
		<pubDate>Sun, 15 Oct 2006 19:14:59 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/11/conditional-assignments/</guid>
		<description><![CDATA[Sometimes, you'll have a scenario with two variables, and you need to use one of them based on a simple test. Rather than a long and awkward if / else statement, C allows the use of the ? : form. It is perfectly acceptable to write: int i,j,k,l; ... i = (j &#62; 5? k [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/15/conditional-assignments/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Preprocessor #s, ##s, and other weird stuff</title>
		<link>http://mikeage.net/2006/10/13/preprocessor-s-s-and-other-weird-stuff/</link>
		<comments>http://mikeage.net/2006/10/13/preprocessor-s-s-and-other-weird-stuff/#comments</comments>
		<pubDate>Fri, 13 Oct 2006 12:10:33 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Preprocessor]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/13/preprocessor-s-s-and-other-weird-stuff/</guid>
		<description><![CDATA[In the post on strings for enums , I used two types of pound symbols in the preprocessor macros: # and ##. Here's some more detail: The first preprocessor macro is ##, which means to concatenate what comes after it with what was before. For example: #define FOO(x) BAR##x FOO(f) FOO(test) will produce (not as [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/13/preprocessor-s-s-and-other-weird-stuff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>i++ Incremements and Execution Sequence</title>
		<link>http://mikeage.net/2006/10/07/i-incremements-and-execution-sequence/</link>
		<comments>http://mikeage.net/2006/10/07/i-incremements-and-execution-sequence/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 21:29:06 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/07/i-incremements-and-execution-sequence/</guid>
		<description><![CDATA[Quiz: What will the following code print? int i = 5; printf("%d ", i++ * i++); printf("%d\n", i); One of the first things most C programmers learn "on the job" is that you can't know when i++ will take place. For example, the following is undefined: char a[10]; int i=5; a[i] = ++i; However, one [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/07/i-incremements-and-execution-sequence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple Pointer Declarations</title>
		<link>http://mikeage.net/2006/10/06/multiple-pointer-declarations/</link>
		<comments>http://mikeage.net/2006/10/06/multiple-pointer-declarations/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 05:18:17 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/06/multiple-pointer-declarations/</guid>
		<description><![CDATA[Quick quiz: What does the following code do: char* p1, p2 ? Hopefully, you recognized that despite the fact that the asterisk is attached to the word char, we're NOT creating two character pointers. Instead, we've created one pointer (p1) and one char variable (p2). Thus, the following are legal: *p1 = 'C'; p2 = [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/06/multiple-pointer-declarations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating an array of strings for an enum</title>
		<link>http://mikeage.net/2006/10/03/creating-an-array-of-strings-for-an-enum/</link>
		<comments>http://mikeage.net/2006/10/03/creating-an-array-of-strings-for-an-enum/#comments</comments>
		<pubDate>Tue, 03 Oct 2006 14:45:05 +0000</pubDate>
		<dc:creator>Mike Miller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://mikeage.net/2006/10/03/creating-an-array-of-strings-for-an-enum/</guid>
		<description><![CDATA[A common issue in writing C based test tools is the desire to be able to show a user a list of all enums. This, of course, is technically impossible, as the mapping from enum to int is one way only. However, the following trick lets you create a two dimensional character array who's index [...]]]></description>
		<wfw:commentRss>http://mikeage.net/2006/10/03/creating-an-array-of-strings-for-an-enum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

