??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久久久波多野高潮,国产高潮国产高潮久久久91,久久精品国产清自在天天线http://www.shnenglu.com/sunraiing9/category/1815.html专注C++技? 在这里写下自q学习心得 感?zhn)? 和大家讨?共同q步Q欢q批评!Q!Q?/description>zh-cnWed, 21 May 2008 03:21:06 GMTWed, 21 May 2008 03:21:06 GMT60DLL的入门知?/title><link>http://www.shnenglu.com/sunraiing9/articles/13804.html</link><dc:creator>@王一?/dc:creator><author>@王一?/author><pubDate>Wed, 18 Oct 2006 02:23:00 GMT</pubDate><guid>http://www.shnenglu.com/sunraiing9/articles/13804.html</guid><wfw:comment>http://www.shnenglu.com/sunraiing9/comments/13804.html</wfw:comment><comments>http://www.shnenglu.com/sunraiing9/articles/13804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunraiing9/comments/commentRss/13804.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunraiing9/services/trackbacks/13804.html</trackback:ping><description><![CDATA[ <p style="TEXT-INDENT: 21pt">DLLQDynamic Link LibraryQ,动态链接库?/p> <p style="TEXT-INDENT: 21pt">1Q关于__declspec(dllimport)和__declspec(dllexport)</p> <p style="TEXT-INDENT: 21pt">在一个DLL的编写过E中Q如果要使一个变量、一个函数或一个类能够被外部程序调用,在函数声明上加上__declspec(dllimport)关键字?/p> <p style="TEXT-INDENT: 21pt">例:</p> <p style="TEXT-INDENT: 21pt">引出一个变量:<br />__declspec(dllexport) int iEx;</p> <p style="TEXT-INDENT: 21pt">引出一个函敎ͼ<br />__declspec(dllexport) int fnEx( int i );</p> <p style="TEXT-INDENT: 21pt">引出一个类Q?br />class __declspec(dllexport) CClassEx<br />{……};</p> <p style="TEXT-INDENT: 21pt">在外部程序引用DLLӞ如果采用隐式调用的方法(关于隐式调用E后讨论Q,需要包含DLL文g相关的头文gQ这个头文g用__declspec(dllimport)关键字指ZDLL导出的内容(实际上就是把原来的__declspec(dllexport)全部替换为__declspec(dllimport)Q?/p> <p style="TEXT-INDENT: 21pt">例:</p> <p style="TEXT-INDENT: 21pt">引入一个变量:<br />__declspec(dllimport) int iEx;</p> <p style="TEXT-INDENT: 21pt">引入一个函敎ͼ<br />__declspec(dllimport) int fnEx( int i );</p> <p style="TEXT-INDENT: 21pt">引入一个类Q?br />class __declspec(dllimport) CClassEx<br />{……};</p> <p style="TEXT-INDENT: 21pt">Z提高E序可读性,可以定义如下宏:<br />#define DllImport __declspec(dllimport)<br />#define DllExport __declspec(dllexport)<br />以便使用?/p> <p style="TEXT-INDENT: 21pt">实际上一般定义如下宏Q?br /><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#ifdef</span><span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?><font color="#000000"> MYDLL_EXPORTS</font></span></p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#define</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> MYDLL_API </font> <font face="新宋?> <span style="COLOR: blue">__declspec</span> <font color="#000000">(</font> <span style="COLOR: blue">dllexport</span> <font color="#000000">)</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#else</span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#define</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> MYDLL_API </font> <font face="新宋?> <span style="COLOR: blue">__declspec</span> <font color="#000000">(</font> <span style="COLOR: blue">dllimport</span> <font color="#000000">)<span style="COLOR: gray"></span></font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#endif</span> </p> <p style="TEXT-INDENT: 21pt"> <font size="2"> <font color="#800000"> <span style="FONT-FAMILY: 宋体">q样Q在源程序的实现文g中先定义</span> <span lang="EN-US"> <font face="Times New Roman">MYDLL_EXPORTS</font> </span> <span style="FONT-FAMILY: 宋体">Q再包含q个头文Ӟ在外E序内,可以直接包含q个头文件。这U方法可以实C个文件多U用途?/span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> </span> <font color="#800000" size="2"> </font> <font size="2"> <font color="#800000"> <span lang="EN-US"> <font face="Times New Roman">2</font> </span> <span style="FONT-FAMILY: 宋体">Q隐式调用和昑ּ调用</span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <font size="2"> <font color="#800000"> <span style="FONT-FAMILY: 宋体">隐式调用是最常用的一U调用方法。它需要原</span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">文g、原头文件和库文件组成。在E序内要包含q个头文Ӟq加入库文g一同编译。在E序启动时会把所有隐式调用的</span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">文g加蝲到内存?/span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <font size="2"> <font color="#800000"> <span style="FONT-FAMILY: 宋体">如果惛_使用的时候才?/span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">文g加入到内存的话,可以使用昑ּ调用。显式调用只需要原</span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">文g卛_Q但是用时必须对知道这?/span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">有哪些导出的W号。可以在</span> <span lang="EN-US"> <font face="Times New Roman">VS</font> </span> <span style="FONT-FAMILY: 宋体">的命令行方式下输入?/span> <span lang="EN-US"> <font face="Times New Roman">depends</font> </span> <span style="FONT-FAMILY: 宋体">”命令来查看</span> <span lang="EN-US"> <font face="Times New Roman">DLL</font> </span> <span style="FONT-FAMILY: 宋体">信息?/span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> </span> <font color="#800000" size="2"> </font> <span style="FONT-FAMILY: 宋体"> <font color="#800000" size="2">CZQ?/font> </span> </p> <p style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> </span> <font color="#800000" size="2"> </font> <span style="FONT-FAMILY: 宋体"> <font color="#800000" size="2">隐式调用Q?/font> </span> </p> <p> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>#include</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> </font> <span style="COLOR: maroon"> <font face="新宋?>"..\DllTest\DllTest.h"</font> </span> </span> </p> <p> <span style="FONT-SIZE: 9pt; COLOR: maroon; FONT-FAMILY: 新宋?>…?span lang="EN-US"></span></span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>void</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> CallDll( </font> <font face="新宋?> <span style="COLOR: blue">void</span> <font color="#000000"> )</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000">{</font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: blue">wchar_t</span> <font color="#000000"> wszBuf[ 32 ];</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <font face="新宋?> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> <span>     </span>wsprintf( wszBuf, TEXT( </font> <span style="COLOR: maroon">"%d"</span> <font color="#000000"> ), fnDllTest( 9 ) );</font> <span style="COLOR: green">//fnDllTest</span> </span> <span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?>?span lang="EN-US">DLL</span>文g导出的方?span lang="EN-US"></span></span> </font> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>wprintf( wszBuf );</font> </font> </span> </p> <p> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000">}</font> </span> </p> <p style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> <font color="#800000" size="2">昑ּ调用Q?/font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋?>void</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> CallDll( </font> <font face="新宋?> <span style="COLOR: blue">void</span> <font color="#000000"> )</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000">{</font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: blue">typedef</span> <font color="#000000"> </font> <span style="COLOR: blue">int</span> <font color="#000000"> (*ADDPROC)( </font> <span style="COLOR: blue">int</span> <font color="#000000"> i );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>ADDPROC Fn;</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>HINSTANCE hInst = LoadLibrary( L</font> <span style="COLOR: maroon">"DllTest.dll"</span> <font color="#000000"> );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: blue">if</span> <font color="#000000"> ( NULL == hInst )</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>{</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>         </span>wprintf( L</font> <span style="COLOR: maroon">"Failed on load DLL."</span> <font color="#000000"> );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">         </font> </span> <span style="COLOR: blue">return</span> <font color="#000000">;</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>}</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>Fn = ( ADDPROC )GetProcAddress( hInst, </font> <span style="COLOR: maroon">"fnDllTest"</span> <font color="#000000"> );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <font face="新宋?> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: green">//</span> </span> <span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?>如果导出时用的?span lang="EN-US">_stdcall, </span>那么q里我们也应该?span lang="EN-US">(_stdcall ADDPROC)</span></span> </font> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: blue">if</span> <font color="#000000">( !Fn )</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span> <span>     </span>wprintf( L</font> <span style="COLOR: maroon">"Failed on get Process Address."</span> <font color="#000000"> );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: blue">else</span> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>{</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">         </font> </span> <span style="COLOR: blue">int</span> <font color="#000000"> i;</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>         </span>i = Fn( 9 );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">         </font> </span> <span style="COLOR: blue">wchar_t</span> <font color="#000000"> wszBuf[ 32 ];</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>         </span>wsprintf( wszBuf, L</font> <span style="COLOR: maroon">"%d"</span> <font color="#000000">, i );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>         </span>wprintf( wszBuf );</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <font color="#000000"> <span>     </span>}</font> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <font face="新宋?> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000"> <span>     </span>FreeLibrary(hInst);</font> <span style="COLOR: green">//</span> </span> <span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?>释放<span lang="EN-US">DLL</span></span> </font> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font face="新宋?> <span> <font color="#000000">     </font> </span> <span style="COLOR: green">/*</span> </font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?> <font face="新宋?> <span>     </span> <span> </span>* ADDRPROC Add = (ADDPROC)GetProcAddress(hInst, "add");</font> </span> </p> <p style="TEXT-ALIGN: left" align="left"> <font face="新宋?> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?> <span>     </span> <span> </span>* </span> <span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?>W而个参数也可以用序?span lang="EN-US">:</span></span> </font> </p> <p style="TEXT-ALIGN: left" align="left"> <font face="新宋?> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?> <span>     </span> <span> </span>* MAKEINTRESOURCE(1)</span> <span style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?>代替函数?span lang="EN-US">.</span></span> </font> </p> <p style="TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋?> <font face="新宋?> <span>     </span> <span> </span>*/</font> </span> </p> <p> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋?> <font color="#000000">}</font> </span> </p> <p style="TEXT-INDENT: 21pt"> <font size="2"> <font color="#800000"> <span lang="EN-US"> <font face="Times New Roman">3</font> </span> <span style="FONT-FAMILY: 宋体">Q注意事?/span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <font size="2"> <font color="#800000"> <span style="FONT-FAMILY: 宋体">如果使用</span> <span lang="EN-US"> <font face="Times New Roman">C++</font> </span> <span style="FONT-FAMILY: 宋体">~程Q那么在E序~译的时候会为变量名{符号重命ؓ诸如?/span> <span lang="EN-US"> <font face="Times New Roman">?fnDllTest@QAEAAV</font> <font face="Times New Roman">0</font> <span lang="EN-US" style="FONT-FAMILY: 宋体"> <span lang="EN-US"> <font face="宋体">?/font> </span> </span> <span lang="EN-US" style="FONT-FAMILY: 宋体">?span lang="EN-US"><font face="宋体">c?span lang="EN-US">?span lang="EN-US">形式<span lang="EN-US">Q?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">调用<span lang="EN-US">?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">。针?span lang="EN-US">q?span lang="EN-US">?span lang="EN-US">问题<span lang="EN-US">Q?span lang="EN-US">?span lang="EN-US">?span lang="EN-US">可以<span lang="EN-US">?span lang="EN-US">?span lang="EN-US">导出<span lang="EN-US">?span lang="EN-US">W号<span lang="EN-US">?span lang="EN-US">?span lang="EN-US">?/span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></font></span></span> <font face="Times New Roman">extern “C?/font> </span> <span style="FONT-FAMILY: 宋体">”修饰符Q就可以保持原有名称。但是导出的cd仍然是重命名后的名称Q要再研I研I?/span> </font> </font> </p> <p style="TEXT-INDENT: 21pt"> <font color="#800000" size="2"> <span style="FONT-FAMILY: 宋体">如果你用MFC生成MFC DLL那么只要做如下定义就可以了class AFX_EXT_CLASS yourClass?/span> </font> </p> <img src ="http://www.shnenglu.com/sunraiing9/aggbug/13804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunraiing9/" target="_blank">@王一?/a> 2006-10-18 10:23 <a href="http://www.shnenglu.com/sunraiing9/articles/13804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inline函数http://www.shnenglu.com/sunraiing9/articles/13754.html@王一?/dc:creator>@王一?/author>Mon, 16 Oct 2006 12:39:00 GMThttp://www.shnenglu.com/sunraiing9/articles/13754.htmlhttp://www.shnenglu.com/sunraiing9/comments/13754.htmlhttp://www.shnenglu.com/sunraiing9/articles/13754.html#Feedback5http://www.shnenglu.com/sunraiing9/comments/commentRss/13754.htmlhttp://www.shnenglu.com/sunraiing9/services/trackbacks/13754.html自己?inline 函数做个ȝ

Q一Qinline函数Q摘自C++ Primer的第三版Q?/p>

         在函数声明或定义中函数返回类型前加上关键字inlinexminQ)指定为内联?/strong>

   inline int min(int first, int secend) {/****/};

      inline函数对编译器而言必须是可见的Q以便它能够在调用点内展开该函数。与非inline函数不同的是Qinline函数必须在调用该函数的每个文本文件中定义。当Ӟ对于同一E序的不同文Ӟ如果inline函数出现的话Q其定义必须相同。对于由两个文gcompute.C和draw.C构成的程序来_E序员不能定义这Lmin()函数Q它在compute.C中指一件事情,而在draw.C中指另外一件事情。如果两个定义不相同Q程序将会有未定义的行ؓQ?/p>

      Z证不会发生这L事情Q徏议把inline函数的定义放到头文g中。在每个调用该inline函数的文件中包含该头文g。这U方法保证对每个inline函数只有一个定义,且程序员无需复制代码Qƈ且不可能在程序的生命期中引v无意的不匚w的事情?/p>

Q二Q内联函数的~程风格(摘自高质量C++/C ~程指南)

关键字inline 必须与函数定义体攑֜一h能函数成ؓ内联Q仅inline 攑֜函数声明前面不vM作用?/p>

如下风格的函数Foo 不能成ؓ内联函数Qinline void Foo(int x, int y); // inline 仅与函数声明攑֜一起void Foo(int x, int y){}而如下风格的函数Foo 则成为内联函敎ͼvoid Foo(int x, int y);inline void Foo(int x, int y) // inline 与函数定义体攑֜一起{}所以说Qinline 是一U“用于实现的关键字”,而不是一U“用于声明的关键字”。一般地Q用户可以阅d数的声明Q但是看不到函数的定义。尽在大多数教U书中内联函数的声明、定义体前面都加了inline 关键字,但我认ؓinline 不应该出现在函数的声明中。这个细节虽然不会媄响函数的功能Q但是体C高质量C++/C E序设计风格的一个基本原则:声明与定义不可؜Z谈,用户没有必要、也不应该知道函数是否需要内联?/p>

定义在类声明之中的成员函数将自动地成为内联函?/strong>Q例如class A{public:void Foo(int x, int y) {  } // 自动地成为内联函数}成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一U良好的~程风格Q上例应该改成:// 头文件class A{public:void Foo(int x, int y)Q}// 定义文ginline void A::Foo(int x, int y){} 慎用内联内联能提高函数的执行效率Qؓ什么不把所有的函数都定义成内联函数Q如果所有的函数都是内联函数Q还用得着“内联”这个关键字吗?内联是以代码膨胀Q复ӞZP仅仅省去了函数调用的开销Q从而提高函数的执行效率。如果执行函C内代码的旉Q相比于函数调用的开销较大Q那么效率的收获会很。另一斚wQ每一处内联函数的调用都要复制代码Q将使程序的M码量增大Q消耗更多的内存I间。以下情况不宜用内联:Q?Q如果函C内的代码比较长,使用内联导致内存消耗代仯高。(2Q如果函C内出现@环,那么执行函数体内代码的时间要比函数调用的开销大。类的构造函数和析构函数Ҏ(gu)让h误解成用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地构造函数和析构函数的定义体攑֜cd明中。一个好的编译器会Ҏ(gu)函数的定义体Q自动地取消不值得的内联(q进一步说明了inline 不应该出现在函数的声明中Q?br />

注意?

内联函数既能够去除函数调用所带来的效率负担又能够保留一般函数的优点。然而,内联函数q不是万能药Q? 
  在一些情况下Q它甚至能够降低E序的性能。因此在使用的时候应该慎重? 
          1Q我们先来看看内联函数给我们带来的好处:从一个用L角度来看Q内联函数看h和普通函CP  
  它可以有参数和返回|也可以有自己的作用域Q然而它却不会引入一般函数调用所带来的负担。另外,  
  它可以比宏更安全更容易调试? 
    当然有一点应该意识到Qinline   specifier仅仅是对~译器的Q编译器有权利忽略这个徏议。那么编译器? 
    如何军_函数内联与否呢?一般情况下关键性因素包括函C的大,是否有局部对象被声明Q函数的复杂性等{? 
          2Q那么如果一个函数被声明为inline但是却没有被内联会发生什么呢Q理ZQ当~译器拒l内联一? 
  函数的时候,那个函数会像普通函C栯对待Q但是还会出C些其他的问题。例如下面这D代码:  
  //   filename   Time.h  
  #include<ctime>  
  #include<iostream>  
  using   namespace   std;  
  class   Time  
  {  
  public:  
          inline   void   Show()   {   for   (int   i   =   0;   i<10;   i++)   cout<<time(0)<<endl;}  
  };  
          因ؓ成员函数Time::Show()包括一个局部变量和一个for循环Q所以编译器一般拒linlineQƈ且把它当作一个普通的成员函数。但是这个包含类声明的头文g会被单独?includeq各个独立的~译单元中:  
          //   filename   f1.cpp  
  #include   "Time.hj"  
  void   f1()  
  {  
          Time   t1;  
          t1.Show();  
  }  
   
  //   filename   f2.cpp  
  #include   "Time.h"  
  void   f2()  
  {  
          Time   t2;  
          t2.Show();  
  }  
  l果~译器ؓq个E序生成了两个相同成员函数的拯Q? 
  void   f1();  
  void   f2();  
  int   main()  
  {  
          f1();    
          f2();  
      return   0;  
  }  
   
  当程序被链接的时候,linker会面对两个相同的Time::Show()拯Q于是函数重  
  定义的连接错误发生。但是老一些的C++实现对付q种情况的办法是通过把一? 
  un-inlined函数当作static来处理。因此每一份函数拷贝仅仅在自己的编译单元中  
  可见Q这样链接错误就解决了,但是在程序中却会留下多䆾函数拯。在q种情况  
  下,E序的性能不但没有提升Q反而增加了~译和链接时间以及最l可执行体的大小? 
  但是q运的是Q新的C++标准中关于un-inlined函数的说法已l改变。一个符合标? 
  C++实现应该只生成一份函数拷贝。然而,要想所有的~译器都支持q一点可能还  
  需要很长时间? 
  另外关于内联函数q有两个更o人头疼的问题。第一个问题是该如何进行维护? 
  一个函数开始的时候可能以内联的Ş式出玎ͼ但是随着pȝ的扩展,函数体可能要  
  求添加额外的功能Q结果内联函数就变得不太可能Q因此需要把inline   specifier  
  去除以及把函C攑ֈ一个单独的源文件中。另一个问题是当内联函数被应用在代  
  码库的时候生。当内联函数改变的时候,用户必须重新~译他们的代码以反映q? 
  U改变。然而对于一个非内联函数Q用户仅仅需要重新链接就可以了? 
  q里惌说的是,内联函数q不是一个增强性能的灵丹妙药。只有当函数非常短小  
  的时候它才能得到我们惌的效果,但是如果函数q不是很短而且在很多地斚w? 
  调用的话Q那么将会得可执行体的体积增大。最令h烦恼的还是当~译器拒l内? 
  的时候。在老的实现中,l果很不h意,虽然在新的实C有很大的改善Q但? 
  仍然q是不那么完善的。一些编译器能够_的聪明来指出哪些函数可以内联哪些  
  不能Q但是,大多数编译器׃那么聪明了,因此q就需要我们的l验来判断? 
  如果内联函数不能增强行能Q就避免使用它!  
  */  
   
  /*  
  用指针代替数l?   
  在许多种情况下,可以用指针运代替数l烦引,q样做常常能产生又快又短? 
  代码。与数组索引相比Q指针一般能使代码速度更快Q占用空间更。用多l数  
  l时差异更明显。下面的代码作用是相同的Q但是效率不一栗? 
   
  char*   pBuffer   =   new   char[100];  
  nTestNumber   =   0;  
   
  for(dwIndex   =   0;dwIndex   <   100;dwIndex   ++)  
  {  
  nTestNumber   =   pBuffer[dwIndex];  
  }  
   
  char*   pTemp   =   pBuffer;  
  for(dwIndex   =   0;dwIndex   <   100;dwIndex   ++)  
  {  
  nTestNumber   =   *(pTemp   ++);  
  }  
   
  指针Ҏ(gu)的优Ҏ(gu)QpBuffer的地址每次装入地址pTemp后,在每ơ@环中只需对pTemp增量操作? 
  在数l烦引方法中Q每ơ@环中都必进行基于dwIndex值求数组下标的复杂运? 
  */  



]]>
cdl构的区?/title><link>http://www.shnenglu.com/sunraiing9/articles/13743.html</link><dc:creator>@王一?/dc:creator><author>@王一?/author><pubDate>Mon, 16 Oct 2006 01:00:00 GMT</pubDate><guid>http://www.shnenglu.com/sunraiing9/articles/13743.html</guid><wfw:comment>http://www.shnenglu.com/sunraiing9/comments/13743.html</wfw:comment><comments>http://www.shnenglu.com/sunraiing9/articles/13743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunraiing9/comments/commentRss/13743.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunraiing9/services/trackbacks/13743.html</trackback:ping><description><![CDATA[ l构(struct) ?c?class)<br /><br />l构与类很相|都表C可以包含数据成员和函数成员的数据结构。与cM同的是,l构是值类型ƈ且不需要堆分配。结构类型的变量直接包含l构的数据,而类cd的变量包含对数据的引用(该变量称为对象)?struct cd适合表示如点、矩形和颜色q样的轻量对象。尽可能将一个点表示为类Q但l构在某些方案中更有效。在一些情况下Q结构的成本较低。例如,如果声明一个含?1000 个点对象的数l,则将为引用每个对象分配附加的内存。结构可以声明构造函敎ͼ但它们必d参数。声明结构的默认Q无参数Q构造函数是错误的。L提供默认构造函C结构成员初始化为它们的默认倹{在l构中初始化实例字段是错误的。在cM,必须初始化实例对? 使用 new q算W创建结构对象时Q将创徏该结构对象,q且调用适当的构造函数。与cM同的是,l构的实例化可以不?new q算W。如果不使用 newQ那么在初始化所有字D之前,字段保持未赋值状态且对象不可用。对于结构,不像c那样存在ѝ一个结构不能从另一个结构或cȝ承,而且不能作ؓ一个类的基。但是,l构从基c?Object l承?br /><br />l构可实现接口,其方式同cd全一栗?br /><br />一个是值类型(l构Q,一个是引用cdQ类Q,l构在传递的时候如果没有指定refQ则传递的是内存中的一分副本,而class则是传递对他的引用?br /><br />cd堆中Q结构在栈中Q类传递的是类在堆中的地址Q而结构是在栈中另复制了一个传递,你改变传递过来的l构不会影响原结构。而类是引用,q一块内存,会改变堆中类的内? <br /><br /><br />   <img src ="http://www.shnenglu.com/sunraiing9/aggbug/13743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunraiing9/" target="_blank">@王一?/a> 2006-10-16 09:00 <a href="http://www.shnenglu.com/sunraiing9/articles/13743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>d当前文g夹内?/title><link>http://www.shnenglu.com/sunraiing9/articles/13741.html</link><dc:creator>@王一?/dc:creator><author>@王一?/author><pubDate>Mon, 16 Oct 2006 00:46:00 GMT</pubDate><guid>http://www.shnenglu.com/sunraiing9/articles/13741.html</guid><wfw:comment>http://www.shnenglu.com/sunraiing9/comments/13741.html</wfw:comment><comments>http://www.shnenglu.com/sunraiing9/articles/13741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunraiing9/comments/commentRss/13741.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunraiing9/services/trackbacks/13741.html</trackback:ping><description><![CDATA[ <p>Q注释:不是文章Q自己随手记的)<br /><br />HANDLE hFind;<br />WIN32_FIND_DATA wfd;<br />if ( !SetCurrentDirectory(strPath) )<br /> return;<br />hFind = FindFirstFile(_ucT("*.*"), &wfd);</p> <p>if ( hFind == INVALID_HANDLE_VALUE )<br /> return;</p> <p>while(FindNextFile(hFind, &wfd)) <br />{<br /> if ( (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && !(wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) )<br /> {<br />  if ( wfd.cFileName[0] != '.' ) <br />  {<br />   UCString temp = (UCString)strPath + wfd.cFileName;<br />   if ( HasSubFolder(ucLPCTSTR(temp)) )<br />   {</p> <p>   }<br />  }<br /> }<br />}<br />SetCurrentDirectory(_ucT("..")); </p> <img src ="http://www.shnenglu.com/sunraiing9/aggbug/13741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunraiing9/" target="_blank">@王一?/a> 2006-10-16 08:46 <a href="http://www.shnenglu.com/sunraiing9/articles/13741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跨^台程序的UNICODE字符串处理方?/title><link>http://www.shnenglu.com/sunraiing9/articles/13740.html</link><dc:creator>@王一?/dc:creator><author>@王一?/author><pubDate>Mon, 16 Oct 2006 00:43:00 GMT</pubDate><guid>http://www.shnenglu.com/sunraiing9/articles/13740.html</guid><wfw:comment>http://www.shnenglu.com/sunraiing9/comments/13740.html</wfw:comment><comments>http://www.shnenglu.com/sunraiing9/articles/13740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunraiing9/comments/commentRss/13740.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunraiing9/services/trackbacks/13740.html</trackback:ping><description><![CDATA[在windows下面~程Q我们通常都知道unicodeq个概念Q如果一个程序是unicode的,那么他将调用<br /><br />unicode的api。这个时候,所有传递给api的字W串参数都要是unicode?如果使用C的风|是很单的<br /><br />Q字W串全部由char* str 转变成TCHAR* str,使用的crt函数(其实也是api)时调用_tcslencȝ函数族就<br /><br />可以了?br /><br />在讨论其它问题前要先明确一个概?unicode ?utf-8~码,utf-16~码是两个不同类别的术语?br /><br />unicode对一个字W提供了一个唯一的编?参看下面的资料,关于UCS-2与UCS-4)<br />假设"?q个字符的编码是0x34 0x34(我ؕ写的),utf-8对其~码Q得到的?0xE3 0x90 0xB6 需?byte<br /><br />的空间进行存储。不同的unicode码经qutf-8~码后会得到变长的结?比如?a'l过utf-8~码后得?br /><br />的是和ascii码相?只占1个byte.对unicode使用不同的方法编?可以有效的节U存储空?如果选择?br /><br />错误的编?会浪费空?.<br /><br />中的unicode(UCS-2)值和~码后的l果<br />unicode                             utf-8           <br />00110100 00110100      11100011  10010000 10110110 <br />a的unicode值和~码后的l果<br />unicode                             utf-8<br />00000000 01100001      01100001<br /><br />q里得出的结论是utf-8,utf-16~码是在存储字符串信息前的一个选择,而不是处理字W串的选择.<br /><br /><br />OK,问题回到字符串编E上来。第一个问题,是要选择内存中的字符串格式,包括自己所有需要传递字<br /><br />W串参数的函数的参数定义。我们这里有3个选择Qchar*(ASCII string),unsigned short*(UCS2 <br /><br />string,windows下的unicode),unsigned long*(UCS4 string,真正的unicode支持)。windows下的api是不<br /><br />支持UCS4的,所以在windowsq_下最好只做前2个的选择。类gwindows的TCHAR定义Q我们可以做q样<br /><br />的定?br />#ifdef _UCS2<br />#define TCHAR unsigned short<br />#else<br />#ifdef _UCS4<br />#define TCHAR unsigned long<br />#else<br />#define TCHAR char<br />#endif<br />#endif<br />然后有一个问题,如果在程序中需要用一个预定义的字W串Q比如说<br />TCHAR* str = "中国";<br />那么,str指向的常量字W串的编码是ACSII string,q是UCS2 unicode string,q是UCS4 unicode <br /><br />string,是取决于~译器的。这样就Ҏ(gu)造成许多不易发现的错误。这里要推荐一个string table的概?br /><br />Q用如下代码替换?br />const TCHAR* str = StringTable::LoadStr(ID_HOMELOAD_NAME);<br />StringTablec解析一个指定编码的本地字符串表XML文g(可以用各U编码存?Q这个文件可以用自?br /><br />义的工具或则是各UXML~辑工具来生成。用StringTable::SetOutPutType(enum MemStrType)来之在<br /><br />LoadStr的时候{成各U字W串~码。当Ӟq个cM定义了一pd的编码{换函敎ͼ比如?br /><br />UTF8TOASCII,UTF8TOUCS2,UTF8TOUCS4,UCS4TOUCS2,UCS4TOASCII,UCS4TOXXX,StringTalbe内部使用UCS4?br /><br />取后的字W串存储格式Q然后再Ҏ(gu)StringTable::SetOutPutType指定的输出类型生成相应编码的<br /><br />Table.q样做的好处是把这个编码的问题重视化,x出现~码不一致的错误Q也能立M正?br /><br />在linux?pȝ对UCS4的支持比较好Q?include<wchar.h>Q里面的函数的接口都是ucs4 string.所以如果写跨^台程序,肯定是要用ucs2?UCS4windows不支持,而且可以节约内存Q但是你的程序就不是真正的UNICODE3.1 Support了,而且也不能支持国家标准GB18030).然后再调用linux的相兛_数时Q{化ؓUCS4.参考文章http://www0.ccidnet.com/tech/os/2001/07/31/58_2811.html。我懒得写了?br /><br /><br /><br />Unicode 的定?br />Unicode 通常用作涉及双字节字W编码方案的通用术语。Unicode CCS 3.1 的官方称谓是 ISO10646-1 ?br /><br />用多八字节编码字W集QUniversal Multiple Octet Coded Character SetQUCSQ。Unicode 3.1 版本<br /><br />d?44,946 个新的编码字W。算?Unicode 3.0 版本已经存在?49,194 个字W,p 94,140 ?br /><br />?br /><br />Unicode ~码字符集利用了一个由 128 个三l的l构成的四维~码I间。其中每个组包含 256 个二l^<br /><br />面。每个^面由 256 个一l的行组成,q且每个行有 256 个单元。每个单元在q个~码I间内对一个字<br /><br />W编码,或者被声明为未l用。这U编码概念被UCؓ UCS-4Q四个八位元用来表示指定l、^面、行?br /><br />单元的每个字W?br /><br />W一个^面(W?00 l的W?00 q面Q是基本多语aq面QBasic Multilingual PlaneQBMPQ。BMP ?br /><br />字母、音节、表意符号和各种W号及数字定义了常规使用的字W。后l的q面用于附加字符或其它还没有<br /><br />发明的编码实体。我们需要这完整的范围去处理世界上的所有语aQ特别是拥有近 64,000 个字W的一<br /><br />些东亚语a?br /><br />BMP 被用作双字节的编码字W集Q这U编码字W集定?ISO 10646 UCS-2 格式。ISO 10646 UCS-2 ?br /><br />是指 UnicodeQƈ且两者相同)。BMPQ像所?UCS q面那样Q包含了 256 行,其中每行包含 256 个单<br /><br />元,字符仅仅按照 BMP 中的行和单元的八位元在单元中被编码?q就允许 16 位编码字W能够被用来?br /><br />写大多数商业上最重要的语a。UCS-2 不需要代码页切换、代码扩展或代码状态。UCS-2 是一U将 <br /><br />Unicode l合到Y件中的简单方法,但它只限于支?Unicode BMP?br /><br />若要?8 位字节表CZ个多?2^8 =256 个字W的字符~码pȝQcharacter coding systemQCCSQ,<br /><br />需要一U字W编码方?character-encoding schemeQCESQ?br /><br /><br />UTF-8<br />UTF-8 转换格式正逐步成ؓ一U占dC的交换国际文本信息的Ҏ(gu)Q因为它可以支持世界上所有的?br /><br />aQ而且它还?ASCII 兼容。UTF-8 使用变长~码。从 0 ?0x7fQ?27Q的字符把自w编码成单字节,<br /><br />而将值更大的字符~码?2 ?6 个字节?br /><br />?1. UTF-8 ~码<br />0x00000000 - 0x0000007F:  0 xxxxxxx  <br />0x00000080 - 0x000007FF:  110 xxxxx10 xxxxxx  <br />0x00000800 - 0x0000FFFF:  1110 xxxx10 xxxxxx10 xxxxxx  <br />0x00010000 - 0x001FFFFF:  11110 xxx10 xxxxxx10 xxxxxx 10 xxxxxx  <br />0x00200000 - 0x03FFFFFF:  111110 xx10 xxxxxx10 xxxxxx10 xxxxxx 10 xxxxxx  <br />0x04000000 - 0x7FFFFFFF:  1111110 x10 xxxxxx10 xxxxxx10 xxxxxx 10 xxxxxx10 xxxxxx <img src ="http://www.shnenglu.com/sunraiing9/aggbug/13740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunraiing9/" target="_blank">@王一?/a> 2006-10-16 08:43 <a href="http://www.shnenglu.com/sunraiing9/articles/13740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一?2位的int按位反{http://www.shnenglu.com/sunraiing9/articles/13737.html@王一?/dc:creator>@王一?/author>Mon, 16 Oct 2006 00:38:00 GMThttp://www.shnenglu.com/sunraiing9/articles/13737.htmlhttp://www.shnenglu.com/sunraiing9/comments/13737.htmlhttp://www.shnenglu.com/sunraiing9/articles/13737.html#Feedback0http://www.shnenglu.com/sunraiing9/comments/commentRss/13737.htmlhttp://www.shnenglu.com/sunraiing9/services/trackbacks/13737.html
using namespace std;

unsigned int bit_reverse(unsigned int n)

{

       n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa);

       n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc);

       n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0);

       n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00);

       n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000);

 

       return n;

}

 

int main(int argc,char* argv[])

{

       int i = 1;

       cout<<i<<" "<<bit_reverse(i)<<endl;

       return 0;

}

       return 0;

}

]]>
l计一?2位int中?”位的个?/title><link>http://www.shnenglu.com/sunraiing9/articles/13732.html</link><dc:creator>@王一?/dc:creator><author>@王一?/author><pubDate>Mon, 16 Oct 2006 00:35:00 GMT</pubDate><guid>http://www.shnenglu.com/sunraiing9/articles/13732.html</guid><wfw:comment>http://www.shnenglu.com/sunraiing9/comments/13732.html</wfw:comment><comments>http://www.shnenglu.com/sunraiing9/articles/13732.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/sunraiing9/comments/commentRss/13732.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/sunraiing9/services/trackbacks/13732.html</trackback:ping><description><![CDATA[ <p>Ҏ(gu)1Q?br />//main.cpp<br />#include <iostream><br /><br />using namespace std;<br /> <br />int count_ones(int n)<br /><br />{<br /><br />       n = (n & 0x55555555) + ((n & 0xaaaaaaaa) >> 1);<br /><br />       n = (n & 0x33333333) + ((n & 0xcccccccc) >> 2);<br /><br />       n = (n & 0x0f0f0f0f) + ((n & 0xf0f0f0f0) >> 4);<br /><br />       n = (n & 0x00ff00ff) + ((n & 0xff00ff00) >> 8);<br /><br />       n = (n & 0x0000ffff) + ((n & 0xffff0000) >> 16);<br /><br /> <br /><br />       return n;<br /><br />}<br /><br /> <br /><br />int main(int argc,char* argv[])<br /><br />{<br />       cout<<count_ones(255)<<endl;<br /><br />       return 0;<br />}<br /><br />Ҏ(gu)2Q?br />const int one_in_char[256]= <br />{ <br />    0, 1, 1, 2, 1, 2,2,3 <br />...... <br />                              ,8 <br />} <br />此ؓ 0-255 每个C 1 的个数。 ?br /><br />int func2(int v) <br />{ <br />    int n=v; <br />    unsigned char *ptr=(unsigned char *)&n; <br />    return one_in_char[ptr[0]]+one_in_char[ptr[1]]+one_in_char[ptr[2]]+one_in_char[ptr[3]]; <br />} <br /><br /><br />本h觉得Ҏ(gu)1更快速:Q?/p> <img src ="http://www.shnenglu.com/sunraiing9/aggbug/13732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/sunraiing9/" target="_blank">@王一?/a> 2006-10-16 08:35 <a href="http://www.shnenglu.com/sunraiing9/articles/13732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.uzfz.cn" target="_blank">ھƷþþӰԺ</a>| <a href="http://www.chaonengtiyu.cn" target="_blank">ĻۺϾþ</a>| <a href="http://www.wyj442.cn" target="_blank">þþ뾫Ʒպý </a>| <a href="http://www.liru56.cn" target="_blank">þùŷպƷ</a>| <a href="http://www.g33e.cn" target="_blank">þ99Ʒ鶹լլ</a>| <a href="http://www.tdstudio.com.cn" target="_blank">99þþƷۺһ</a>| <a href="http://www.nutiao.cn" target="_blank">˾þóۺӰԺ</a>| <a href="http://www.17youshi.cn" target="_blank">þAVӰ</a>| <a href="http://www.yaojikeji.cn" target="_blank">Բľþþþþ</a>| <a href="http://www.enetbase.cn" target="_blank">ݺɫþþۺ </a>| <a href="http://www.wbyyd.cn" target="_blank">þþƷAVһ</a>| <a href="http://www.cdake.cn" target="_blank">þ99ڹ</a>| <a href="http://www.37eee.cn" target="_blank">þ˳ƷCAOPOREN </a>| <a href="http://www.t24196.cn" target="_blank">vaþþþúݺ</a>| <a href="http://www.ovyp.cn" target="_blank">91޹˾þþƷַ</a>| <a href="http://www.mechuo.cn" target="_blank">޾Ʒþò</a>| <a href="http://www.zhaoziping.cn" target="_blank">޹˾þۺ3d</a>| <a href="http://www.555yyy.cn" target="_blank">þۺϹɫ88þþƷۺ </a>| <a href="http://www.vlcz.cn" target="_blank">޾Ʒþþþþò</a>| <a href="http://www.eu0i.cn" target="_blank">99Ʒþþþþþó</a>| <a href="http://www.globenewswire.com.cn" target="_blank">ݾƷŮ˾þþþþ</a>| <a href="http://www.9978217.cn" target="_blank">þ×Ʒþþþþ</a>| <a href="http://www.zqdiary.cn" target="_blank">޹ƷۺϾþһ</a>| <a href="http://www.ekpb.cn" target="_blank">99þùۺϾƷԭ</a>| <a href="http://www.ebianlian.cn" target="_blank">ŮHҳþþ</a>| <a href="http://www.ccfnt.com.cn" target="_blank">ľƷ99þù</a>| <a href="http://www.a-house.com.cn" target="_blank">ۿþ</a>| <a href="http://www.zjyht.cn" target="_blank">þþƷһ</a>| <a href="http://www.goodyd.cn" target="_blank">ƷۺϾþþþþ97</a>| <a href="http://www.227s.cn" target="_blank">þþþAVۺ</a>| <a href="http://www.caifu580.cn" target="_blank">AVҰ¾þ</a>| <a href="http://www.wongceline.cn" target="_blank">þþƷа</a>| <a href="http://www.hhabg.com.cn" target="_blank">ھƷ˾þþþø</a>| <a href="http://www.suoguai.cn" target="_blank">þӰۺ</a>| <a href="http://www.aboto.cn" target="_blank">޹˾Ʒ91þþ </a>| <a href="http://www.zburs.cn" target="_blank">ݹƷþ</a>| <a href="http://www.mk606.cn" target="_blank">97þۺɫۺɫhd</a>| <a href="http://www.chuangwote.com.cn" target="_blank">ĻþþƷAPP</a>| <a href="http://www.ldzv.cn" target="_blank">þwww˳ɿƬ</a>| <a href="http://www.gybyz.cn" target="_blank">69Ʒþþþվ</a>| <a href="http://www.biaopie.cn" target="_blank">ۺ˾þôý</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>