<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Claymore's blog]]></title>
<link><![CDATA[http://claymore.phpme.info/]]></link>
<description><![CDATA[Ajax,C,C++,Java,语言,PHP,脚本,Python,Unix,Linux,Web,开发,Windows,技术,新闻,读物,操作系统,杂项,资源,流程,方法,程序,设计,编程,工具,语言,网络,安全,职场,生涯,轶事,趣闻]]></description>
<language>zh-cn</language>
<copyright><![CDATA[PhpMe_Blog Alpha 1.062]]></copyright>
<webMaster><![CDATA[389961817@qq.com]]></webMaster>
<generator><![CDATA[2010-09-10 13:01:32]]></generator>
<item>
<link><![CDATA[http://claymore.phpme.info/index.php/view_4_92.html]]></link>
<title><![CDATA[匈牙利命名法]]></title>
<author>claymore</author>
<category><![CDATA[ ]]></category>
<pubDate>2008-05-21 19:58:36</pubDate>
<guid><![CDATA[http://claymore.phpme.info/index.php/view_4_92.html]]></guid>
<description><![CDATA[<DIV align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG style="FLOAT: right" src="http://www.claymorephp.com/userfiles/image/1158805281711582_small.jpg">匈牙利命名法是一种编程时的命名规范。基本原则是：变量名＝属性＋类型＋对象描述，其中每一对象的名称都要求有明确含义，可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。</DIV>
<DIV align=left>举例来说，表单的名称为form，那么在匈牙利命名法中可以简写为frm，则当表单变量名称为Switchboard时，变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单，同样，如果此变量类型为标签，那么就应命名成 lblSwitchboard。可以看出，匈牙利命名法非常便于记忆，而且使变量名非常清晰易懂，这样，增强了代码的可读性，方便各程序员之间相互交流代码。 </DIV>
<DIV align=left>据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的，后来他在微软呆了几年，于是这种命名法就通过微软的各种产品和文档资料向世界传播开了。现在，大部分程序员不管自己使用什么软件进行开发，或多或少都使用了这种命名法。这种命名法的出发点是把量名变按：属性+类型+对象描述的顺序组合起来，以使程序员作变量时对变量的类型和其它属性有直观的了解，下面是HN变量命名规范，其中也有一些是我个人的偏向： </DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center><br>
匈牙利命名法MFC、句柄、控件及结构的命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=514 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>Windows类型</DIV></TD>
<TD>
<DIV align=left>样本变量</DIV></TD>
<TD>
<DIV align=left>MFC类</DIV></TD>
<TD>
<DIV align=left>样本变量</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND</DIV></TD>
<TD>
<DIV align=left>hWnd；</DIV></TD>
<TD>
<DIV align=left>CWnd*</DIV></TD>
<TD>
<DIV align=left>pWnd；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HDLG</DIV></TD>
<TD>
<DIV align=left>hDlg；</DIV></TD>
<TD>
<DIV align=left>CDialog*</DIV></TD>
<TD>
<DIV align=left>pDlg；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HDC</DIV></TD>
<TD>
<DIV align=left>hDC；</DIV></TD>
<TD>
<DIV align=left>CDC*</DIV></TD>
<TD>
<DIV align=left>pDC；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HGDIOBJ</DIV></TD>
<TD>
<DIV align=left>hGdiObj；</DIV></TD>
<TD>
<DIV align=left>CGdiObject*</DIV></TD>
<TD>
<DIV align=left>pGdiObj；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HPEN</DIV></TD>
<TD>
<DIV align=left>hPen；</DIV></TD>
<TD>
<DIV align=left>CPen*</DIV></TD>
<TD>
<DIV align=left>pPen；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HBRUSH</DIV></TD>
<TD>
<DIV align=left>hBrush；</DIV></TD>
<TD>
<DIV align=left>CBrush*</DIV></TD>
<TD>
<DIV align=left>pBrush；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HFONT </DIV></TD>
<TD>
<DIV align=left>hFont；</DIV></TD>
<TD>
<DIV align=left>CFont*</DIV></TD>
<TD>
<DIV align=left>pFont；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HBITMAP </DIV></TD>
<TD>
<DIV align=left>hBitmap；</DIV></TD>
<TD>
<DIV align=left>CBitmap*</DIV></TD>
<TD>
<DIV align=left>pBitmap；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HPALETTE </DIV></TD>
<TD>
<DIV align=left>hPaltte；</DIV></TD>
<TD>
<DIV align=left>CPalette*</DIV></TD>
<TD>
<DIV align=left>pPalette；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HRGN </DIV></TD>
<TD>
<DIV align=left>hRgn；</DIV></TD>
<TD>
<DIV align=left>CRgn*</DIV></TD>
<TD>
<DIV align=left>pRgn；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HMENU </DIV></TD>
<TD>
<DIV align=left>hMenu；</DIV></TD>
<TD>
<DIV align=left>CMenu*</DIV></TD>
<TD>
<DIV align=left>pMenu；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CState* </DIV></TD>
<TD>
<DIV align=left>pState；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CButton*</DIV></TD>
<TD>
<DIV align=left>pButton；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CEdit*</DIV></TD>
<TD>
<DIV align=left>pEdit；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CListBox*</DIV></TD>
<TD>
<DIV align=left>pListBox；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CComboBox*</DIV></TD>
<TD>
<DIV align=left>pComboBox；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HWND </DIV></TD>
<TD>
<DIV align=left>hCtl；</DIV></TD>
<TD>
<DIV align=left>CScrollBar*</DIV></TD>
<TD>
<DIV align=left>pScrollBar；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HSZ </DIV></TD>
<TD>
<DIV align=left>hszStr；</DIV></TD>
<TD>
<DIV align=left>CString </DIV></TD>
<TD>
<DIV align=left>pStr；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>POINT </DIV></TD>
<TD>
<DIV align=left>pt；</DIV></TD>
<TD>
<DIV align=left>CPoint </DIV></TD>
<TD>
<DIV align=left>pt；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>SIZE </DIV></TD>
<TD>
<DIV align=left>size；</DIV></TD>
<TD>
<DIV align=left>CSize </DIV></TD>
<TD>
<DIV align=left>size；</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>RECT </DIV></TD>
<TD>
<DIV align=left>rect；</DIV></TD>
<TD>
<DIV align=left>CRect </DIV></TD>
<TD>
<DIV align=left>rect；</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>一般前缀命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=514 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>前缀</DIV></TD>
<TD>
<DIV align=left>类型</DIV></TD>
<TD>
<DIV align=left>实例</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>C</DIV></TD>
<TD>
<DIV align=left>类或结构</DIV></TD>
<TD>
<DIV align=left>CDocument，CPrintInfo</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>m_</DIV></TD>
<TD>
<DIV align=left>成员变量</DIV></TD>
<TD>
<DIV align=left>m_pDoc，m_nCustomers</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>
<DIV align=center></DIV>变量命名规范 </DIV>
<DIV align=center>
<TABLE cellPadding=0 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>前缀</DIV></TD>
<TD>
<DIV align=left>类型</DIV></TD>
<TD>
<DIV align=left>描述</DIV></TD>
<TD>
<DIV align=left>实例</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>ch</DIV></TD>
<TD>
<DIV align=left>char</DIV></TD>
<TD>
<DIV align=left>8位字符</DIV></TD>
<TD>
<DIV align=left>chGrade</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>ch </DIV></TD>
<TD>
<DIV align=left>TCHAR</DIV></TD>
<TD>
<DIV align=left>如果_UNICODE定义，则为16位字符</DIV></TD>
<TD>
<DIV align=left>chName</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>b</DIV></TD>
<TD>
<DIV align=left>BOOL</DIV></TD>
<TD>
<DIV align=left>布尔值</DIV></TD>
<TD>
<DIV align=left>bEnable</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>n </DIV></TD>
<TD>
<DIV align=left>int</DIV></TD>
<TD>
<DIV align=left>整型（其大小依赖于操作系统）</DIV></TD>
<TD>
<DIV align=left>nLength</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>n </DIV></TD>
<TD>
<DIV align=left>UINT</DIV></TD>
<TD>
<DIV align=left>无符号值（其大小依赖于操作系统）</DIV></TD>
<TD>
<DIV align=left>nHeight</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>w </DIV></TD>
<TD>
<DIV align=left>WORD</DIV></TD>
<TD>
<DIV align=left>16位无符号值</DIV></TD>
<TD>
<DIV align=left>wPos</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>l </DIV></TD>
<TD>
<DIV align=left>LONG</DIV></TD>
<TD>
<DIV align=left>32位有符号整型</DIV></TD>
<TD>
<DIV align=left>lOffset</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>dw </DIV></TD>
<TD>
<DIV align=left>DWORD</DIV></TD>
<TD>
<DIV align=left>32位无符号整型</DIV></TD>
<TD>
<DIV align=left>dwRange</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>p </DIV></TD>
<TD>
<DIV align=left>*</DIV></TD>
<TD>
<DIV align=left>指针</DIV></TD>
<TD>
<DIV align=left>pDoc</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>lp </DIV></TD>
<TD>
<DIV align=left>FAR*</DIV></TD>
<TD>
<DIV align=left>远指针</DIV></TD>
<TD>
<DIV align=left>lpszName</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>lpsz </DIV></TD>
<TD>
<DIV align=left>LPSTR</DIV></TD>
<TD>
<DIV align=left>32位字符串指针</DIV></TD>
<TD>
<DIV align=left>lpszName</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>lpsz </DIV></TD>
<TD>
<DIV align=left>LPCSTR</DIV></TD>
<TD>
<DIV align=left>32位常量字符串指针</DIV></TD>
<TD>
<DIV align=left>lpszName</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>lpsz </DIV></TD>
<TD>
<DIV align=left>LPCTSTR</DIV></TD>
<TD>
<DIV align=left>如果_UNICODE定义，则为32位常量字符串指针</DIV></TD>
<TD>
<DIV align=left>lpszName</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>h </DIV></TD>
<TD>
<DIV align=left>handle</DIV></TD>
<TD>
<DIV align=left>Windows对象句柄</DIV></TD>
<TD>
<DIV align=left>hWnd</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>lpfn </DIV></TD>
<TD>
<DIV align=left>callback</DIV></TD>
<TD>
<DIV align=left>指向CALLBACK函数的远指针</DIV></TD>
<TD>
<DIV align=left>?</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>应用程序符号命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>前缀</DIV></TD>
<TD>
<DIV align=left>符号类型</DIV></TD>
<TD>
<DIV align=left>实例</DIV></TD>
<TD>
<DIV align=left>范围</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDR_ </DIV></TD>
<TD>
<DIV align=left>不同类型的多个资源共享标识</DIV></TD>
<TD>
<DIV align=left>IDR_MAIINFRAME</DIV></TD>
<TD>
<DIV align=left>1～0x6FFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDD_</DIV></TD>
<TD>
<DIV align=left>对话框资源</DIV></TD>
<TD>
<DIV align=left>IDD_SPELL_CHECK</DIV></TD>
<TD>
<DIV align=left>1～0x6FFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HIDD_</DIV></TD>
<TD>
<DIV align=left>对话框资源的Help上下文</DIV></TD>
<TD>
<DIV align=left>HIDD_SPELL_CHECK</DIV></TD>
<TD>
<DIV align=left>0x20001～0x26FF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDB_ </DIV></TD>
<TD>
<DIV align=left>位图资源</DIV></TD>
<TD>
<DIV align=left>IDB_COMPANY_LOGO</DIV></TD>
<TD>
<DIV align=left>1～0x6FFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDC_</DIV></TD>
<TD>
<DIV align=left>光标资源</DIV></TD>
<TD>
<DIV align=left>IDC_PENCIL</DIV></TD>
<TD>
<DIV align=left>1～0x6FFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDI_</DIV></TD>
<TD>
<DIV align=left>图标资源</DIV></TD>
<TD>
<DIV align=left>IDI_NOTEPAD</DIV></TD>
<TD>
<DIV align=left>1～0x6FFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>ID_</DIV></TD>
<TD>
<DIV align=left>来自菜单项或工具栏的命令</DIV></TD>
<TD>
<DIV align=left>ID_TOOLS_SPELLING</DIV></TD>
<TD>
<DIV align=left>0x8000～0xDFFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HID_</DIV></TD>
<TD>
<DIV align=left>命令Help上下文</DIV></TD>
<TD>
<DIV align=left>HID_TOOLS_SPELLING</DIV></TD>
<TD>
<DIV align=left>0x18000～0x1DFFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDP_</DIV></TD>
<TD>
<DIV align=left>消息框提示</DIV></TD>
<TD>
<DIV align=left>IDP_INVALID_PARTNO</DIV></TD>
<TD>
<DIV align=left>8～0xDEEF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>HIDP_</DIV></TD>
<TD>
<DIV align=left>消息框Help上下文</DIV></TD>
<TD>
<DIV align=left>HIDP_INVALID_PARTNO</DIV></TD>
<TD>
<DIV align=left>0x30008～0x3DEFF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDS_</DIV></TD>
<TD>
<DIV align=left>串资源</DIV></TD>
<TD>
<DIV align=left>IDS_COPYRIGHT</DIV></TD>
<TD>
<DIV align=left>1～0x7EEF</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>IDC_</DIV></TD>
<TD>
<DIV align=left>对话框内的控件</DIV></TD>
<TD>
<DIV align=left>IDC_RECALC</DIV></TD>
<TD>
<DIV align=left>8～0xDEEF</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>Microsoft MFC宏命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=522 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>名称</DIV></TD>
<TD>
<DIV align=left>类型</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_AFXDLL</DIV></TD>
<TD>
<DIV align=left>唯一的动态连接库（Dynamic Link Library，DLL）版本</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_ALPHA</DIV></TD>
<TD>
<DIV align=left>仅编译DEC Alpha处理器</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_DEBUG</DIV></TD>
<TD>
<DIV align=left>包括诊断的调试版本</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_MBCS</DIV></TD>
<TD>
<DIV align=left>编译多字节字符集</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_UNICODE</DIV></TD>
<TD>
<DIV align=left>在一个应用程序中打开Unicode</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>AFXAPI </DIV></TD>
<TD>
<DIV align=left>MFC提供的函数</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>CALLBACK</DIV></TD>
<TD>
<DIV align=left>通过指针回调的函数</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>库标识符命名法</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=521 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>标识符</DIV></TD>
<TD>
<DIV align=left>值和含义</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>u </DIV></TD>
<TD>
<DIV align=left>ANSI（N）或Unicode（U）</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>d </DIV></TD>
<TD>
<DIV align=left>调试或发行：D = 调试；忽略标识符为发行。</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>静态库版本命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=518 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>库</DIV></TD>
<TD>
<DIV align=left>描述</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>NAFXCWD.LIB</DIV></TD>
<TD>
<DIV align=left>调试版本：MFC静态连接库</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>NAFXCW.LIB</DIV></TD>
<TD>
<DIV align=left>发行版本：MFC静态连接库</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>UAFXCWD.LIB</DIV></TD>
<TD>
<DIV align=left>调试版本：具有Unicode支持的MFC静态连接库</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>UAFXCW.LIB</DIV></TD>
<TD>
<DIV align=left>发行版本：具有Unicode支持的MFC静态连接库</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>动态连接库命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 width=518 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>名称</DIV></TD>
<TD>
<DIV align=left>类型</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>_AFXDLL</DIV></TD>
<TD>
<DIV align=left>唯一的动态连接库（DLL）版本</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>WINAPI </DIV></TD>
<TD>
<DIV align=left>Windows所提供的函数</DIV></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>&nbsp;</DIV>
<DIV align=center>Windows.h中新的命名规范</DIV>
<DIV align=center>
<TABLE cellPadding=0 border=1>
<TBODY>
<TR>
<TD>
<DIV align=left>类型</DIV></TD>
<TD>
<DIV align=left>定义描述</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>WINAPI</DIV></TD>
<TD>
<DIV align=left>使用在API声明中的FAR PASCAL位置，如果正在编写一个具有导出API人口点的DLL，则可以在自己的API中使用该类型</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>CALLBACK</DIV></TD>
<TD>
<DIV align=left>使用在应用程序回叫例程，如窗口和对话框过程中的FAR PASCAL的位置</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>LPCSTR</DIV></TD>
<TD>
<DIV align=left>与LPSTR相同，只是LPCSTR用于只读串指针，其定义类似（const char FAR*）</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>UINT</DIV></TD>
<TD>
<DIV align=left>可移植的无符号整型类型，其大小由主机环境决定（对于Windows NT和Windows 9x为32位）；它是unsigned int的同义词</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>LRESULT</DIV></TD>
<TD>
<DIV align=left>窗口程序返回值的类型</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>LPARAM</DIV></TD>
<TD>
<DIV align=left>声明lParam所使用的类型，lParam是窗口程序的第四个参数</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>WPARAM</DIV></TD>
<TD>
<DIV align=left>声明wParam所使用的类型，wParam是窗口程序的第三个参数</DIV></TD></TR>
<TR>
<TD>
<DIV align=left>LPVOID</DIV></TD>
<TD>
<DIV align=left>一般指针类型，与（void *）相同，可以用来代替LPSTR</DIV></TD></TR></TBODY></TABLE></DIV>
]]></description>
</item>
<item>
<link><![CDATA[http://claymore.phpme.info/index.php/view_4_58.html]]></link>
<title><![CDATA[编写可移植C/C++程序的要点]]></title>
<author>claymore</author>
<category><![CDATA[ 可移植C/C++ ]]></category>
<pubDate>2008-05-14 15:33:54</pubDate>
<guid><![CDATA[http://claymore.phpme.info/index.php/view_4_58.html]]></guid>
<description><![CDATA[<div>&nbsp;&nbsp;&nbsp; 分层设计，隔离平台相关的代码。就像可测试性一样，可移植性也要从设计抓起。一般来说，最上层和最下层都不具有良好的可移植性。最上层是GUI，大多数GUI都不是跨平台的，如Win32 SDK和MFC。最下层是操作系统...</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 1.分层设计，隔离平台相关的代码。就像可测试性一样，可移植性也要从设计抓起。一般来说，最上层和最下层都不具有良好的可移植性。最上层是GUI，大多数GUI都不是跨平台的，如Win32 SDK和MFC。最下层是操作系统API，大多部分操作系统API都是专用的。 </div>
<div>&nbsp;</div>
<div>　　如果这两层的代码散布在整个软件中，那么这个软件的可植性将非常的差，这是不言自明的。那么如何避免这种情况呢？当然是分层设计了：</div>
<div>&nbsp;</div>
<div>　　最底层采用Adapter模式，把不同操作系统的API封装成一套统一的接口。至于封装成类还是封装成函数，要看你采用的C还是C++写的程序了。这看起来很简单，其实不尽然（看完整篇文章后你会明白的），它将耗去你大量的时间去编写代码，去测试它们。采用现存的程序库，是明智的做法，有很多这样的库，比如，C库有glib（GNOME的基础类），C++库有ACE(ADAPTIVE Communication Environment)等等，在开发第一个平台时就采用这些库，可以大大减少移植的工作量。 </div>
]]></description>
</item>
<item>
<link><![CDATA[http://claymore.phpme.info/index.php/view_4_54.html]]></link>
<title><![CDATA[堆和栈的区别以及关于程序结束内存释放问题]]></title>
<author>claymore</author>
<category><![CDATA[ 学习笔记 ]]></category>
<pubDate>2008-05-04 21:52:28</pubDate>
<guid><![CDATA[http://claymore.phpme.info/index.php/view_4_54.html]]></guid>
<description><![CDATA[<div>一般认为在c中分为这几个存储区 <br>
1 栈 - 有编译器自动分配释放 <br>
2 堆 - 一般由程序员分配释放，若程序员不释放，程序结束时可能由OS回收 <br>
3 全局区（静态区），全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。</div>
<div>&nbsp;<br>
- 程序结束释放 </div>
<div><br>
4另外还有一个专门放常量的地方。 - 程序结束释放在函数体中定义的变量通常是在栈上，用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量，加了static修饰符后不管在哪里都存放在全局区（静态区）,在所有函数体外定义的static变量表示在该文件中有效，不能extern到别的文件用，在函数体内定义的static表示只在该函数体内有效。另外，函数中的"adgfdf"这样的字符串存放在常量区。 </div>
<div><br>
比如： </div>
<div><br>
int a = 0; 全局初始化区 <br>
char *p1; 全局未初始化区 <br>
main() <br>
{ <br>
int b; 栈 <br>
char s[] = "abc";栈 <br>
char *p2; 栈 <br>
char *p3 = "123456"; 123456在常量区，p3在栈上。 <br>
static int c =0； 全局（静态）初始化区 <br>
p1 = (char *)malloc(10); <br>
p2 = (char *)malloc(20); <br>
分配得来得10和20字节的区域就在堆区。 <br>
strcpy(p1, "123456"); 123456放在常量区，编译器可能会将它与p3所指向的"123456"优化成一块。 <br>
} </div>
]]></description>
</item>
<item>
<link><![CDATA[http://claymore.phpme.info/index.php/view_4_7.html]]></link>
<title><![CDATA[C/C++语言误区之:void main( )]]></title>
<author>claymore</author>
<category><![CDATA[ ]]></category>
<pubDate>2008-01-12 20:46:11</pubDate>
<guid><![CDATA[http://claymore.phpme.info/index.php/view_4_7.html]]></guid>
<description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多人甚至市面上的一些书籍，都使用了void main( ) ，其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.（ void main( ) 从来就不存在于 C++ 或者 C ）。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。<br>
&nbsp;<br>
1. C<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 C89 中，main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e（《C 程序设计语言第二版》）用的就是 main( )。不过在最新的 C99 标准中，只有以下两种定义方式是正确的：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main( void )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main( int argc, char *argv[] )<br>
（参考资料：ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup）<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然，我们也可以做一点小小的改动。例如：char *argv[] 可以写成 char **argv；argv 和 argc 可以改成别的变量名（如 intval 和 charval），不过一定要符合变量的命名规则。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果不需要从命令行中获取参数，请用int main(void) ；否则请用int main( int argc, char *argv[] ) 。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main 函数的返回值类型必须是 int ，这样返回值才能传递给程序的激活者（如操作系统）。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果 main 函数的最后没有写 return 语句的话，C99 规定编译器要自动在生成的目标文件中（如 exe 文件）加入return 0; ，表示程序正常退出。不过，我还是建议你最好在main函数的最后加上return 语句，虽然没有这个必要，但这是一个好的习惯。注意，vc6不会在目标文件中加入return 0; ，大概是因为 vc6 是 98 年的产品，所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧！不过，gcc3.2（Linux 下的 C 编译器）会在生成的目标文件中加入 return 0; 。</div><FONT style="BACKGROUND-COLOR: #101010"></FONT>
]]></description>
</item>
<item>
<link><![CDATA[http://claymore.phpme.info/index.php/view_4_6.html]]></link>
<title><![CDATA[用C语言编写简单的病毒]]></title>
<author>claymore</author>
<category><![CDATA[ Virus ]]></category>
<pubDate>2008-01-12 20:41:44</pubDate>
<guid><![CDATA[http://claymore.phpme.info/index.php/view_4_6.html]]></guid>
<description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Abstract] This paper introduce the charateristic of the computer virus,then show a simple example written by TURBOC2.0.<br>
一、什么是病毒&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; 恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在信息安全中是很重要的.<br>
&nbsp;&nbsp;&nbsp; 我们要对付病毒,就要了解病毒.<br>
&nbsp;&nbsp;&nbsp; 写一些病毒是一个很好的办法.<br>
&nbsp;&nbsp;&nbsp; 如果要写一个病毒,先要知道它是什么.可以给病毒一个定义，这一定义是被广泛认可的。Frederic Cohen博士在《计算机病毒简短讲座》中提到的：<br>
“……一种能够通过修改自身来包括或释放自我拷贝而传染给其他程序的程序。“<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实病毒和普通程序并无太大不同，而且通常比较简单，不像很多程序那样复杂。只不过病毒里面用到一些正常程序一般不会用到的技术。<br>
&nbsp;&nbsp;&nbsp;&nbsp; 要编制一个病毒，首先要知道病毒的运行机理。<br>
&nbsp;&nbsp;&nbsp;&nbsp; 不论是何种病毒，它一般在结构上分为三个功能模块：感染机制，触发机制和有效载荷。<br>
&nbsp;&nbsp;&nbsp;&nbsp; 在病毒结构中，首要的而且唯一必需的部分是感染机制。病毒首先必须是能够繁殖自身的代码，这是病毒之所以成为病毒的根本<br>
原因。我们可以用一段类C伪码来表示这个过程。</div>
]]></description>
</item>
</channel>
</rss>