<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[星星幼稚园]]></title>
<link>http://blog.pfan.cn/bruceteen</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[电子表]]></title>
		<link>http://blog.pfan.cn/bruceteen/12743.html</link>
		<description><![CDATA[#define _CRT_SECURE_NO_DEPRECATE // 仅VC++2005才需要这个宏#include &lt;iostream&gt;#include &lt;iomanip&gt;#include &lt;ctime&gt;#include &lt;cassert&gt;#include &lt;conio.h&gt;#include &lt;windows.h&gt;using namespace std;#pragma comment( lib, "Winmm" ) // 如果是dev-cpp, 手工在连接器中加入 libwinmm.a 文件路径，比如 C:/Dev-Cpp/lib/libwinmm.a
void __stdcall timecallback( UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2 ){&nbsp;&nbsp;&nbsp; time_t t = time( 0 );&nbsp;&nbsp;&nbsp; tm* lt = localtime( &amp;t );&nbsp;&nbsp;&nbsp; SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE), *(COORD*)dwUser );&nbsp;&nbsp;&nbsp; cout &lt;&lt; setw(4) &lt;&lt; setfill('0') &lt;&lt; right &lt;&lt; ( 1900 + lt-&gt;tm_year ) &lt;&lt; '/'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; setw(2) &lt;&lt; setfill('0') &lt;&lt; right &lt;&lt; ( 1 + lt-&gt;tm_mon )&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; '/'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; setw(2) &lt;&lt; setfill('0') &lt;&lt; r]]></description>
		<author><![CDATA[bruceteen]]></author>
		<pubDate>2006-04-19 11:03:00</pubDate>
		</item>
				<item>
		<title><![CDATA[count_of&nbsp;之&nbsp;宏实现&nbsp;和&nbsp;模板实现&nbsp;的比较]]></title>
		<link>http://blog.pfan.cn/bruceteen/11244.html</link>
		<description><![CDATA[count_of 的作用是编译时静态获取数组元素数目，C中必须使用宏实现：#define count_of(a) (sizeof(a)/sizeof(a[0]))C++中还可以使用模板实现：template&lt;typename T,size_t N&gt; inline size_t count_of( T (&amp;)[N] ) { return N; }
宏实现的优点是：C和C++均可使用模板实现优点是：可以禁止掉不合法的应用
C宏实现的事例代码：#include &lt;stdio.h&gt;#define count_of(a) (sizeof(a)/sizeof(a[0]))int main( void ){&nbsp;&nbsp;&nbsp; char a[12];&nbsp;&nbsp;&nbsp; int b[3][4];&nbsp;&nbsp;&nbsp; char* p = 0;
&nbsp;&nbsp;&nbsp; printf( "%u\n", count_of(a) ); // 输出12&nbsp;&nbsp;&nbsp; printf( "%u\n", count_of(b) ); // 输出3&nbsp;&nbsp;&nbsp; printf( "%u\n", count_of(p) ); // 用法错误，但编译时却无法检测出来}
C++模板实现的事例代码：#include &lt;iostream&gt;template&lt;typename T,size_t N&gt; inline size_t count_of( T (&amp;)[N] ) { return N; }int main( void ){&nbsp;&nbsp;&nbsp; char a[12];&nbsp;&nbsp;&nbsp; int b[3][4];&nbsp;&nbsp;&nbsp; char* p = 0;
&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; count_of(a) &lt;&lt; std::endl; // 输出12&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; count_of(b) &lt;&lt; std::endl; // 输出3&nbsp;&nbsp;&]]></description>
		<author><![CDATA[bruceteen]]></author>
		<pubDate>2006-03-21 10:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[立此存照 01]]></title>
		<link>http://blog.pfan.cn/bruceteen/2230.html</link>
		<description><![CDATA[主题：关于寄存器变量~ 
--------------------------------------------------------------------------------
楼主&nbsp;&nbsp;&nbsp;&nbsp;shengaa
用寄存器变量的目的是为了提高运行速度，但是在用之前要先判断CPU寄存器是否有空，那么这个判断不是也额外增加了开销了么？？&nbsp;&nbsp;这样运行速度不是等于没有提高么？？ 不解~~~ 
--------------------------------------------------------------------------------
第1楼&nbsp;&nbsp;&nbsp;bruceteen
呵呵，是编译时判断的。 
--------------------------------------------------------------------------------
第2楼&nbsp;&nbsp;&nbsp;shengaa
既然是编译时判断的，那生成可执行程序后，在运行时不是还要判断寄存器是否有空闲的么，不会在程序运行时就不判断了吧？就直接根据编译时判断的结果----把变量放在寄存器或者内存中？？&nbsp;&nbsp;&nbsp;要是在编译的时候 寄存器有空，在运行可执行程序的时候，寄存器没空，那怎么办？？ 
--------------------------------------------------------------------------------
第3楼&nbsp;&nbsp;&nbsp;euclid
可能编译器隐藏了一些代码，如果不空则原寄存器的内容进栈保存先~象汇编 
--------------------------------------------------------------------------------
第4楼&nbsp;&nbsp;&nbsp;shengaa
所以说运行时还是要做出额外的开销的嘛&nbsp;&nbsp;
这样不就违背了用寄存器变量的原意了么 
--------------------------------------------------------------------------------
第5楼&n]]></description>
		<author><![CDATA[bruceteen]]></author>
		<pubDate>2005-06-28 13:24:00</pubDate>
		</item>
				<item>
		<title><![CDATA[献给这个论坛上的C/C++初学者]]></title>
		<link>http://blog.pfan.cn/bruceteen/2100.html</link>
		<description><![CDATA[献给programfan论坛上的C/C++初学者
一. C、C++以及C#的关系1. C++虽然主要是以C的基础发展起来的一门新语言，但她不是C的替代品，不是C的升级，C++和C是兄弟关系。没有谁比谁先进的说法，更重要的一点是C和C++各自的标准委员会是独立的，最新的C++标准是C++98/2003年修订，最新的C标准是C99。因此也没有先学C再说C++的说法，也不再（注意这个"不再"）有C++语法是C语法的超集的说法。
2. C++/CLI 和 C# 是微软的，它们与C和C++没有任何关系，虽然部分语法相似。但哪两种语言不相似呢？都是abc这26个字母。
二. 编译器的选择3. 不要使用TC/TC++/BC/CB等古老的编译器来学习C/C++，因为它们太古老了，不支持新的C/C++标准。不要使用CBX/VC++6.0/VC2003等对C/C++标准支持不好的编译器，虽然这些编译器适合工作，但不适合学习，因为它们中的语法陷阱很多。我推荐的编译器是 gcc/mingw。
三. 学C/C++，而不是学编译器4. 不要用""代替&lt;&gt;来包含系统头文件。使用 "" 则意味着告诉别人，这个文件不是标准库的，而是存放于工程目录下自己的文件。对于 #include &lt;iostream&gt; 按缺省理解为包含C++的标准文件iostream对于 #include "iostream" 按缺省理解为包含一个存在于当前工程目录下的文件iostream，这个自定义的iostream文件应该与标准的iostream文件不同，否则为什么不用 #include &lt;iostream&gt; ？事实上，更严重的是，#include "标准库" 其行为是由编译器定义的，只有 #include &lt;标准库&gt; 才是C/C++标准规定的标准库接口。如果你 #include "标准库" 形式可能有如下三种错误：a. 报某某文件不存在，因为C/C++标准只规定 #include &lt;标准库&gt; 后就可以使用相应函数，而并没有规定这个文件一定需要实际存在，所以使用 #include "标准库" 形式必然出错；b. 编译报错，理由同上，编译器可能为 #include &lt;标准库&gt; 做了格外工作，而绝不会为 #include "标准库" 做；c. 联接报错]]></description>
		<author><![CDATA[bruceteen]]></author>
		<pubDate>2005-06-25 15:32:00</pubDate>
		</item>
		</channel>
</rss>