锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久久乳精品爆,亚洲精品高清一二区久久,国产精品久久久久久一区二区三区http://www.shnenglu.com/mmdengwo/zh-cnThu, 08 May 2025 22:12:25 GMTThu, 08 May 2025 22:12:25 GMT60C++涓殑榪斿洖鍊間紭鍖?/title><link>http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205819.html</link><dc:creator>娌涙矝</dc:creator><author>娌涙矝</author><pubDate>Mon, 17 Feb 2014 10:20:00 GMT</pubDate><guid>http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205819.html</guid><wfw:comment>http://www.shnenglu.com/mmdengwo/comments/205819.html</wfw:comment><comments>http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mmdengwo/comments/commentRss/205819.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mmdengwo/services/trackbacks/205819.html</trackback:ping><description><![CDATA[<span style="background-color: #eeeeee; color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; line-height: 20px;">鍘熸枃鍑鴻嚜<a style="color: #2970a6; text-decoration: none;">紼嬪簭浜虹敓</a> >> <a style="color: #2970a6; text-decoration: none;">C++涓殑榪斿洖鍊間紭鍖?return value optimization)</a></span><span style="background-color: #eeeeee; color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; line-height: 20px;"><br />榪斿洖鍊間紭鍖栵紙Return Value Optimization錛岀畝縐癛VO錛夛紝鏄繖涔堜竴縐嶄紭鍖栨満鍒訛細褰撳嚱鏁伴渶瑕佽繑鍥炰竴涓璞$殑鏃跺欙紝濡傛灉鑷繁鍒涘緩涓涓復鏃跺璞$敤鎴瘋繑鍥烇紝閭d箞榪欎釜涓存椂瀵硅薄浼氭秷鑰椾竴涓瀯閫犲嚱鏁幫紙Constructor錛夌殑璋冪敤銆佷竴涓鍒舵瀯閫犲嚱鏁扮殑璋冪敤錛圕opy Constructor錛変互鍙婁竴涓瀽鏋勫嚱鏁幫紙Destructor錛夌殑璋冪敤鐨勪唬浠楓傝屽鏋滅◢寰仛涓鐐逛紭鍖栵紝灝卞彲浠ュ皢鎴愭湰闄嶄綆鍒頒竴涓瀯閫犲嚱鏁扮殑浠d環錛屼笅闈㈡槸鍦╒isual Studio 2008鐨凞ebug妯″紡涓嬪仛鐨勪竴涓祴璇曪細錛堝湪GCC涓嬫祴璇曠殑鏃跺欏彲鑳界紪璇戝櫒鑷繁榪涜浜哛VO浼樺寲錛岀湅涓嶅埌涓ょ浠g爜鐨勫尯鍒級<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #008000; ">//</span><span style="color: #008000; "> C++ Return Value Optimization<br /></span><span style="color: #008080; "> 2</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; "> 浣滆咃細浠g爜鐤瓙<br /></span><span style="color: #008080; "> 3</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; "> 鍗氬錛?/span><span style="color: #008000; text-decoration: underline; ">http://www.programlife.net/</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 4</span> <span style="color: #008000; "></span>#include <iostream><br /><span style="color: #008080; "> 5</span> <span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><span style="color: #008080; "> 6</span>  <br /><span style="color: #008080; "> 7</span> <span style="color: #0000FF; ">class</span> Rational<br /><span style="color: #008080; "> 8</span> {<br /><span style="color: #008080; "> 9</span> <span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">10</span>     Rational(<span style="color: #0000FF; ">int</span> numerator = 0, <span style="color: #0000FF; ">int</span> denominator = 1) : <br /><span style="color: #008080; ">11</span>       n(numerator), d(denominator)<br /><span style="color: #008080; ">12</span>       {<br /><span style="color: #008080; ">13</span>           cout << "Constructor Called<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />" << endl;<br /><span style="color: #008080; ">14</span>       }<br /><span style="color: #008080; ">15</span>       ~Rational()<br /><span style="color: #008080; ">16</span>       {<br /><span style="color: #008080; ">17</span>           cout << "Destructor Called<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />" << endl;<br /><span style="color: #008080; ">18</span>       }<br /><span style="color: #008080; ">19</span>       Rational(<span style="color: #0000FF; ">const</span> Rational& rhs)<br /><span style="color: #008080; ">20</span>       {<br /><span style="color: #008080; ">21</span>           <span style="color: #0000FF; ">this</span>->d = rhs.d;<br /><span style="color: #008080; ">22</span>           <span style="color: #0000FF; ">this</span>->n = rhs.n;<br /><span style="color: #008080; ">23</span>           cout << "Copy Constructor Called<img src="http://www.shnenglu.com/Images/dot.gif" alt="" />" << endl;<br /><span style="color: #008080; ">24</span>       }<br /><span style="color: #008080; ">25</span>       <span style="color: #0000FF; ">int</span> numerator() <span style="color: #0000FF; ">const</span> { <span style="color: #0000FF; ">return</span> n; }<br /><span style="color: #008080; ">26</span>       <span style="color: #0000FF; ">int</span> denominator() <span style="color: #0000FF; ">const</span> { <span style="color: #0000FF; ">return</span> d; }<br /><span style="color: #008080; ">27</span> <span style="color: #0000FF; ">private</span>:<br /><span style="color: #008080; ">28</span>     <span style="color: #0000FF; ">int</span> n, d;<br /><span style="color: #008080; ">29</span> };<br /><span style="color: #008080; ">30</span>  <br /><span style="color: #008080; ">31</span> <span style="color: #008000; ">//</span><span style="color: #008000; ">const Rational operator*(const Rational& lhs,<br /></span><span style="color: #008080; ">32</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">                         const Rational& rhs)<br /></span><span style="color: #008080; ">33</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">{<br /></span><span style="color: #008080; ">34</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">    return Rational(lhs.numerator() * rhs.numerator(),<br /></span><span style="color: #008080; ">35</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">                    lhs.denominator() * rhs.denominator());<br /></span><span style="color: #008080; ">36</span> <span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">}</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">37</span> <span style="color: #008000; "></span> <br /><span style="color: #008080; ">38</span> <span style="color: #0000FF; ">const</span> Rational <span style="color: #0000FF; ">operator</span>*(<span style="color: #0000FF; ">const</span> Rational& lhs,<br /><span style="color: #008080; ">39</span>                          <span style="color: #0000FF; ">const</span> Rational& rhs)<br /><span style="color: #008080; ">40</span> {<br /><span style="color: #008080; ">41</span>     cout << "----------- Enter operator* -----------" << endl;<br /><span style="color: #008080; ">42</span>     Rational tmp(lhs.numerator() * rhs.numerator(),<br /><span style="color: #008080; ">43</span>         lhs.denominator() * rhs.denominator());<br /><span style="color: #008080; ">44</span>     cout << "----------- Leave operator* -----------" << endl;<br /><span style="color: #008080; ">45</span>     <span style="color: #0000FF; ">return</span> tmp;<br /><span style="color: #008080; ">46</span> }<br /><span style="color: #008080; ">47</span>  <br /><span style="color: #008080; ">48</span> <span style="color: #0000FF; ">int</span> main(<span style="color: #0000FF; ">int</span> argc, <span style="color: #0000FF; ">char</span> **argv)<br /><span style="color: #008080; ">49</span> {<br /><span style="color: #008080; ">50</span>     Rational x(1, 5), y(2, 9);<br /><span style="color: #008080; ">51</span>     Rational z = x * y;<br /><span style="color: #008080; ">52</span>     cout << "calc result: " << z.numerator() <br /><span style="color: #008080; ">53</span>         << "/" << z.denominator() << endl;<br /><span style="color: #008080; ">54</span>  <br /><span style="color: #008080; ">55</span>     <span style="color: #0000FF; ">return</span> 0;<br /><span style="color: #008080; ">56</span> }</div><span style="background-color: #eeeeee; color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; line-height: 20px;"><br /></span><p style="margin: 0px 0px 10px; color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; line-height: 20px; background-color: #eeeeee; padding: 0px;">鍑芥暟杈撳嚭鎴浘濡備笅錛?br /><a style="color: #2970a6; text-decoration: none;"><img src="http://www.programlife.net/wp-content/uploads/2011/06/non-rvo.jpg" alt="Return Value Optimization" title="non-rvo" width="667" height="233" size-full="" wp-image-1560"="" style="border: 0px; display: block; margin-left: auto; margin-right: auto; max-width: 723px;" /></a><br />鍙互鐪嬪埌娑堣椾竴涓瀯閫犲嚱鏁幫紙Constructor錛夌殑璋冪敤銆佷竴涓鍒舵瀯閫犲嚱鏁扮殑璋冪敤錛圕opy Constructor錛変互鍙婁竴涓瀽鏋勫嚱鏁幫紙Destructor錛夌殑璋冪敤鐨勪唬浠楓?/p><p style="margin: 0px 0px 10px; color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; line-height: 20px; background-color: #eeeeee; padding: 0px;">鑰屽鏋滄妸operator*鎹㈡垚鍙︿竴縐嶅艦寮忥細<br /><br /></p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">const</span> Rational <span style="color: #0000FF; ">operator</span>*(<span style="color: #0000FF; ">const</span> Rational& lhs,<br /><span style="color: #008080; ">2</span>                 <span style="color: #0000FF; ">const</span> Rational& rhs)<br /><span style="color: #008080; ">3</span> {<br /><span style="color: #008080; ">4</span>     <span style="color: #0000FF; ">return</span> Rational(lhs.numerator() * rhs.numerator(),<br /><span style="color: #008080; ">5</span>                 lhs.denominator() * rhs.denominator());<br /><span style="color: #008080; ">6</span> }<br /><br /><br /><br /><span style="color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; font-size: 14px; line-height: 20px;">灝卞彧浼氭秷鑰椾竴涓瀯閫犲嚱鏁扮殑鎴愭湰浜嗭細</span><br style="color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; font-size: 14px; line-height: 20px;" /><a style="color: #2970a6; text-decoration: none; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; font-size: 14px; line-height: 20px;"><img src="http://www.programlife.net/wp-content/uploads/2011/06/rvo.jpg" alt="榪斿洖鍊間紭鍖? title="rvo" width="670" height="159" size-full="" wp-image-1561"="" style="border: 0px; display: block; margin-left: auto; margin-right: auto; max-width: 723px;" /></a></div><img src ="http://www.shnenglu.com/mmdengwo/aggbug/205819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mmdengwo/" target="_blank">娌涙矝</a> 2014-02-17 18:20 <a href="http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205819.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Copy On Write(鍐欐椂澶嶅埗)http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205812.html娌涙矝娌涙矝Mon, 17 Feb 2014 10:15:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205812.htmlhttp://www.shnenglu.com/mmdengwo/comments/205812.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205812.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205812.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205812.html鏈枃鏈鍒濆彂琛ㄤ簬紼嬪簭浜虹敓 >> Copy On Write(鍐欐椂澶嶅埗) 浣滆咃細浠g爜鐤瓙

Copy On Write錛堝啓鏃跺鍒訛級鏄湪緙栫▼涓瘮杈冨父瑙佺殑涓涓妧鏈紝闈㈣瘯涓篃浼氬伓灝斿嚭鐜幫紙濂藉儚Java涓氨緇忓父鏈夊瓧絎︿覆鍐欐椂澶嶅埗鐨勭瑪璇曢錛夛紝浠婂ぉ鍦ㄧ湅銆奙ore Effective C++銆嬬殑寮曠敤璁℃暟鏃跺氨璁插埌浜咰opy On Write——鍐欐椂澶嶅埗銆備笅闈㈢畝鍗曚粙緇嶄笅Copy On Write(鍐欐椂澶嶅埗)錛屾垜浠亣璁維TL涓殑string鏀寔鍐欐椂澶嶅埗錛堝彧鏄亣璁撅紝鍏蜂綋鏈粡鑰冭瘉錛岃繖閲屼互Mircosoft Visual Studio 6.0涓轟緥錛屽鏋滄湁鍏磋叮錛屽彲浠ヨ嚜宸辯炕闃呮簮鐮侊級

Copy On Write(鍐欐椂澶嶅埗)鐨勫師鐞嗘槸浠涔堬紵
鏈変竴瀹氱粡楠岀殑紼嬪簭鍛樺簲璇ラ兘鐭ラ亾Copy On Write(鍐欐椂澶嶅埗)浣跨敤浜?#8220;寮曠敤璁℃暟”錛屼細鏈変竴涓彉閲忕敤浜庝繚瀛樺紩鐢ㄧ殑鏁伴噺銆傚綋絎竴涓被鏋勯犳椂錛宻tring鐨勬瀯閫犲嚱鏁頒細鏍規嵁浼犲叆鐨勫弬鏁頒粠鍫嗕笂鍒嗛厤鍐呭瓨錛屽綋鏈夊叾瀹冪被闇瑕佽繖鍧楀唴瀛樻椂錛岃繖涓鏁頒負鑷姩绱姞錛屽綋鏈夌被鏋愭瀯鏃訛紝榪欎釜璁℃暟浼氬噺涓錛岀洿鍒版渶鍚庝竴涓被鏋愭瀯鏃訛紝姝ゆ椂鐨勫紩鐢ㄨ鏁頒負1鎴栨槸0錛屾鏃訛紝紼嬪簭鎵嶄細鐪熸鐨凢ree榪欏潡浠庡爢涓婂垎閰嶇殑鍐呭瓨銆?br />寮曠敤璁℃暟灝辨槸string綾諱腑鍐欐椂鎵嶆嫹璐濈殑鍘熺悊錛?/p>

浠涔堟儏鍐典笅瑙﹀彂Copy On Write(鍐欐椂澶嶅埗)
寰堟樉鐒訛紝褰撶劧鏄湪鍏變韓鍚屼竴鍧楀唴瀛樼殑綾誨彂鐢熷唴瀹規敼鍙樻椂錛屾墠浼氬彂鐢烠opy On Write(鍐欐椂澶嶅埗)銆傛瘮濡俿tring綾葷殑[]銆?銆?=銆?絳夛紝榪樻湁涓浜泂tring綾諱腑璇稿insert銆乺eplace銆乤ppend絳夋垚鍛樺嚱鏁扮瓑錛屽寘鎷被鐨勬瀽鏋勬椂銆?/p>

紺轟緥浠g爜錛?br />

// 浣滆咃細浠g爜鐤瓙 
// 鍗氬錛歨ttp://www.programlife.net/
// 寮曠敤璁℃暟 & 鍐欐椂澶嶅埗
#include <iostream>
#include <string>
using namespace std;  
int main(int argc, char **argv)
{
   string sa = "Copy on write";
   string sb = sa;
   string sc = sb;
   printf("sa char buffer address: 0x%08X\n", sa.c_str());
   printf("sb char buffer address: 0x%08X\n", sb.c_str());
   printf("sc char buffer address: 0x%08X\n", sc.c_str());  
   sc = "Now writing..."; printf("After writing sc:\n");
   printf("sa char buffer address: 0x%08X\n", sa.c_str());
   printf("sb char buffer address: 0x%08X\n", sb.c_str());
   printf("sc char buffer address: 0x%08X\n", sc.c_str());  
   return 0;
}
杈撳嚭緇撴灉濡備笅錛圴C 6.0錛夛細

Copy On Write錛堝啓鏃跺鍒訛級
鍙互鐪嬪埌錛孷C6閲岄潰鐨剆tring鏄敮鎸佸啓鏃跺鍒剁殑錛屼絾鏄垜鐨刅isual Studio 2008灝變笉鏀寔榪欎釜鐗規э紙Debug鍜孯elease閮芥槸錛夛細
Visual Studio 2008涓嶆敮鎸丆opy On Write錛堝啓鏃跺鍒訛級

鎷撳睍闃呰錛氾紙鎽樿嚜銆奧indows Via C/C++銆?th Edition錛屼笉鎯崇湅鑻辨枃鍙互鐪嬩腑鏂囩殑PDF錛屼腑鏂囩増絎?42欏碉級
Static Data Is Not Shared by Multiple Instances of an Executable or a DLL



娌涙矝 2014-02-17 18:15 鍙戣〃璇勮
]]>
Linux瀹夎CodeBlocksSVN鏈鏂扮増http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205810.html娌涙矝娌涙矝Mon, 17 Feb 2014 10:10:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205810.htmlhttp://www.shnenglu.com/mmdengwo/comments/205810.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205810.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205810.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205810.htmlhttp://apt.jenslody.de/



# 鎵撳紑杞歡婧愰厤緗枃浠舵坊鍔犱笅闈?琛?/span>
sudo gedit /etc/apt/sources.list

deb http://apt.jenslody.de/ any main
deb-src http://apt.jenslody.de/ any main
deb http://apt.jenslody.de/ any release
deb-src http://apt.jenslody.de/ any release
deb http://apt.wxwidgets.org/ lenny-wx main

# 鏇存柊杞歡婧愰厤緗枃浠?鍜?瀹夎Key
sudo apt-get update
sudo apt-get install jens-lody-debian-keyring
wget -q http://apt.wxwidgets.org/key.asc -O- | sudo apt-key add -


榪欐牱鍙槸鎶婅蔣浠舵簮瀹惰繘鍘諱簡錛屽茍娌℃湁瀹夎濂斤紝鎵浠ヨ繕瑕佽緭鍏ュ畨瑁呭懡浠?/span>
# 鐒跺悗杈撳叆涓嬮潰榪欎釜鍛戒護寮濮嬪畨瑁?codeblocks
sudo apt-get install codeblocks



鐜板湪瀹夎濂斤紝浠庣紪紼嬭蔣浠墮噷寮鍚疌odeBlocks浜嗭紝鏄嫳鏂囩殑錛屽茍涓旀槸鏈榪戝嚑鏃ョ殑鏈鐗堟湰


# 浣犱篃鍙互鐩存帴涓嬭澆 CodeBlocks 鐨勪簩榪涘埗鍙戣鍖咃紝浠庤繖涓猆RL榪涘叆
http://apt.jenslody.de/pool/


# 涓枃鍖朇odeBlocks 涓嬭澆榪欎釜鍖咃紝璇█鏂囦歡 Linux涓嬮氱敤鐨?/span>
http://srgb.googlecode.com/files/CodeBlocks_Linux_Install.zip

榪涘叆鍘嬬緝鍖呮妸璇█鏂囦歡鏀懼埌妗岄潰 '/locale/zh_CN/CodeBlocks.mo'  
涓枃鍖?codeblocks locale/zh_CN/codeblocks.mo 閲岀殑 涓枃鍖栨枃浠舵斁榪欓噷
 '/usr/share/codeblocks/locale/zh_CN/codeblocks.mo'  
璁劇疆鏉冮檺涓烘墍鏈変漢鍙互璁塊棶




# 浣跨敤綆$悊鍛樻潈闄愭妸 璇█鍖?locale 鐩綍 鎷夊埌 /usr/share/codeblocks閲?/span>
sudo nautilus /usr/share/codeblocks/
娉ㄦ剰 locale 鐨勬潈闄愬彲鑳戒笉瀹屾暣錛屾墍浠?閫変綇鐩綍 鎵鏈夎?緹ょ粍-鍏朵粬璁懼畾閮借兘璁塊棶鏂囦歡;
瀵瑰寘鍚殑鏂囦歡搴旂敤鏉冮檺錛?/span>
榪涘叆 /usr/share/codeblocks/locale/zh_CN/ 鐩綍閫変袱涓枃浠?/span>
鍙抽敭淇敼鏉冮檺 鎵鏈夎?鍜?緹ょ粍 閮藉彲浠ヨ鍐?/span>




鐜板湪瀹夎鐨?CodeBlocks 鎵撳紑鏄腑鏂囬噷錛屼絾鏄彧鏈夊熀鏈琁DE鐜錛屽緢澶氭彃浠跺拰寮鍙戝寘娌″畨瑁?/span>
鍙互杈撳叆 sudo apt-get install codeblocks <鎸変袱涓婽AB>
鍒楀嚭娌℃湁瀹夎鐨勫叾浠栧寘錛?浣犲彲浠ラ夋嫨瀹夎錛屾垜鍋鋒噿浜?/span>
sudo apt-get install codeblocks* <鍥炶濺>
sudo apt-get install libwxsmith* <鍥炶濺>
sudo apt-get install libwxgtk2.8-dev <鍥炶濺>


鐜板湪寮鍚疌B錛屽緩绔嬩竴涓獁x欏圭洰錛岀紪璇戯紝鍙互緙栬瘧鎴愬姛浜?/span>


娌涙矝 2014-02-17 18:10 鍙戣〃璇勮
]]>
Step By Step(userdata)http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205809.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:50:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205809.htmlhttp://www.shnenglu.com/mmdengwo/comments/205809.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205809.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205809.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205809.html   鍦↙ua涓彲浠ラ氳繃鑷畾涔夌被鍨嬬殑鏂瑰紡涓嶤璇█浠g爜鏇撮珮鏁堛佹洿鐏墊椿鐨勪氦浜掋傝繖閲屾垜浠氳繃涓涓畝鍗曞畬鏁寸殑紺轟緥鏉ュ涔犱竴涓婰ua涓璾serdata鐨勪嬌鐢ㄦ柟寮忋傞渶瑕佽鏄庣殑鏄紝璇ョず渚嬪畬鍏ㄦ潵鑷簬Programming in Lua銆傚叾鍔熻兘鏄敤C紼嬪簭瀹炵幇涓涓狶ua鐨勫竷灝旀暟緇勶紝浠ユ彁渚涚▼搴忕殑鎵ц鏁堢巼銆傝涓嬮潰鐨勪唬鐮佸拰鍏抽敭鎬ф敞閲娿?  

澶嶅埗浠g爜
  1 #include <lua.hpp>   
2
#include <lauxlib.h>
3
#include <lualib.h>
4
#include <limits.h>
5

6
#define BITS_PER_WORD (CHAR_BIT * sizeof(int))
7
#define I_WORD(i) ((unsigned int)(i))/BITS_PER_WORD
8
#define I_BIT(i) (1 << ((unsigned int)(i)%BITS_PER_WORD))
9

10
typedef struct NumArray {
11
int size; 12 unsigned int values[1];
13
} NumArray;
14

15
extern "C" int newArray(lua_State* L)
16
{
17
//1. 媯鏌ョ涓涓弬鏁版槸鍚︿負鏁村瀷銆備互鍙婅鍙傛暟鐨勫兼槸鍚﹀ぇ浜庣瓑浜?.
18
int n = luaL_checkint(L,1);
19
luaL_argcheck(L, n >= 1, 1, "invalid size.");
20
size_t nbytes = sizeof(NumArray) + I_WORD(n - 1) * sizeof(int);
21
//2. 鍙傛暟琛ㄧずLua涓簎serdata鍒嗛厤鐨勫瓧鑺傛暟銆傚悓鏃跺皢鍒嗛厤鍚庣殑userdata瀵硅薄鍘嬪叆鏍堜腑銆?/span>
22
NumArray* a = (NumArray*)lua_newuserdata(L,nbytes);
23
a->size = n;
24
for (int i = 0; i < I_WORD(n - 1); ++i)
25
a->values[i] = 0;
26
//鑾峰彇娉ㄥ唽琛ㄥ彉閲弇yarray錛岃key鐨勫間負metatable銆?/span>
27
luaL_getmetatable(L,"myarray");
28
//灝唘serdata鐨勫厓琛ㄨ緗負鍜宮yarray鍏寵仈鐨則able銆傚悓鏃跺皢鏍堥《鍏冪礌寮瑰嚭銆?/span>
29
lua_setmetatable(L,-2);
30
return 1;
31
}
32

33
extern "C" int setArray(lua_State* L)
34
{
35
//1. Lua浼犵粰璇ュ嚱鏁扮殑絎竴涓弬鏁板繀欏繪槸userdata錛岃瀵硅薄鐨勫厓琛ㄤ篃蹇呴』鏄敞鍐岃〃涓拰myarray鍏寵仈鐨則able銆?
36
//鍚﹀垯璇ュ嚱鏁版姤閿欏茍緇堟紼嬪簭銆?/span>
37
NumArray* a = (NumArray*)luaL_checkudata(L,1,"myarray");
38
int index = luaL_checkint(L,2) - 1;
39
//2. 鐢變簬浠諱綍綾誨瀷鐨勬暟鎹兘鍙互鎴愪負甯冨皵鍊鹼紝鍥犳榪欓噷浣跨敤any鍙槸涓轟簡紜繚鏈?涓弬鏁般?/span>
40
luaL_checkany(L,3);
41
luaL_argcheck(L,a != NULL,1,"'array' expected.");
42
luaL_argcheck(L,0 <= index && index < a->size,2,"index out of range.");
43
if (lua_toboolean(L,3))
44
a->values[I_WORD(index)] |= I_BIT(index);
45
else
46
a->values[I_WORD(index)] &= ~I_BIT(index);
47
return 0;
48
}
49

50
extern "C" int getArray(lua_State* L)
51
{
52
NumArray* a = (NumArray*)luaL_checkudata(L,1,"myarray");
53
int index = luaL_checkint(L,2) - 1;
54
luaL_argcheck(L, a != NULL, 1, "'array' expected.");
55
luaL_argcheck(L, 0 <= index && index < a->size,2,"index out of range");
56
lua_pushboolean(L,a->values[I_WORD(index)] & I_BIT(index));
57
return 1;
58
}
59

60
extern "C" int getSize(lua_State* L)
61
{
62
NumArray* a = (NumArray*)luaL_checkudata(L,1,"myarray");
63
luaL_argcheck(L,a != NULL,1,"'array' expected.");
64
lua_pushinteger(L,a->size);
65
return 1;
66
}
67

68
extern "C" int array2string(lua_State* L)
69
{
70
NumArray* a = (NumArray*)luaL_checkudata(L,1,"myarray");
71
lua_pushfstring(L,"array(%d)",a->size);
72
return 1;
73
}
74

75
static luaL_Reg arraylib_f [] = {
76
{"new", newArray},
77
{NULL, NULL}
78
};
79

80
static luaL_Reg arraylib_m [] = {
81
{"set", setArray},
82
{"get", getArray},
83
{"size", getSize},
84
{"__tostring", array2string}, //print(a)鏃禠ua浼氳皟鐢ㄨ鍏冩柟娉曘?/span>
85
{NULL, NULL}
86
};
87

88
extern "C" __declspec(dllexport)
89
int luaopen_testuserdata(lua_State* L)
90
{
91
//1. 鍒涘緩鍏冭〃錛屽茍灝嗚鍏冭〃鎸囧畾緇檔ewArray鍑芥暟鏂板垱寤虹殑userdata銆傚湪Lua涓璾serdata涔熸槸浠able鐨勮韓浠借〃鐜扮殑銆?
92
//榪欐牱鍦ㄨ皟鐢ㄥ璞″嚱鏁版椂錛屽彲浠ラ氳繃楠岃瘉鍏秏etatable鐨勫悕縐版潵紜畾鍙傛暟userdata鏄惁鍚堟硶銆?/span>
93
luaL_newmetatable(L,"myarray");
94
lua_pushvalue(L,-1);
95 //2. 涓轟簡瀹炵幇闈㈠瀵硅薄鐨勮皟鐢ㄦ柟寮忥紝闇瑕佸皢鍏冭〃鐨刜_index瀛楁鎸囧悜鑷韓錛屽悓鏃跺啀灝哸rraylib_m鏁扮粍涓殑鍑芥暟娉ㄥ唽鍒?
96
//鍏冭〃涓紝涔嬪悗鍩轟簬榪欎簺娉ㄥ唽鍑芥暟鐨勮皟鐢ㄥ氨鍙互浠ラ潰鍚戝璞$殑褰㈠紡璋冪敤浜嗐?
97
//lua_setfield鍦ㄦ墽琛屽悗浼氬皢鏍堥《鐨則able寮瑰嚭銆?/span>
98
lua_setfield(L,-2,"__index");
99
//灝嗚繖浜涙垚鍛樺嚱鏁版敞鍐岀粰鍏冭〃錛屼互淇濊瘉Lua鍦ㄥ鎵炬柟娉曟椂鍙互瀹氫綅銆侼ULL鍙傛暟琛ㄧず灝嗙敤鏍堥《鐨則able浠f浛絎簩涓弬鏁般?/span>
100 luaL_register(L,NULL,arraylib_m);
101 //榪欓噷鍙敞鍐岀殑宸ュ巶鏂規硶銆?/span>
102 luaL_register(L,"testuserdata",arraylib_f);
103 return 1;
104 }
澶嶅埗浠g爜

銆銆杞婚噺綰serdata錛?nbsp;
銆銆涔嬪墠浠嬬粛鐨勬槸full userdata錛孡ua榪樻彁渚涗簡鍙︿竴縐嶈交閲忕駭userdata(light userdata)銆備簨瀹炰笂錛岃交閲忕駭userdata浠呬粎琛ㄧず鐨勬槸C鎸囬拡鐨勫鹼紝鍗?void*)銆傜敱浜庡畠鍙槸涓涓鹼紝鎵浠ヤ笉鐢ㄥ垱寤恒傚鏋滈渶瑕佸皢涓涓交閲忕駭userdata鏀懼叆鏍堜腑錛岃皟鐢╨ua_pushlightuserdata鍗沖彲銆俧ull userdata鍜宭ight userdata涔嬮棿鏈澶х殑鍖哄埆鏉ヨ嚜浜庣浉絳夋у垽鏂紝瀵逛簬涓涓猣ull userdata錛屽畠鍙槸涓庤嚜韜浉絳夛紝鑰宭ight userdata鍒欒〃紺轟負涓涓狢鎸囬拡錛屽洜姝わ紝瀹冧笌鎵鏈夎〃紺哄悓涓鎸囬拡鐨刲ight userdata鐩哥瓑銆傚啀鏈夊氨鏄痩ight userdata涓嶄細鍙楀埌鍨冨溇鏀墮泦鍣ㄧ殑綆$悊錛屼嬌鐢ㄦ椂灝卞儚涓涓櫘閫氱殑鏁村瀷鏁板瓧涓鏍楓?/p>

娌涙矝 2014-02-17 17:50 鍙戣〃璇勮
]]>
Step By Step(緙栧啓C鍑芥暟鐨勬妧宸?http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205808.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:45:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205808.htmlhttp://www.shnenglu.com/mmdengwo/comments/205808.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205808.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205808.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205808.html闃呰鍏ㄦ枃

娌涙矝 2014-02-17 17:45 鍙戣〃璇勮
]]>
Step By Step(Lua璋冪敤C鍑芥暟)http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205807.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:45:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205807.htmlhttp://www.shnenglu.com/mmdengwo/comments/205807.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205807.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205807.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205807.html Lua鍙互璋冪敤C鍑芥暟鐨勮兘鍔涘皢鏋佸ぇ鐨勬彁楂楲ua鐨勫彲鎵╁睍鎬у拰鍙敤鎬с傚浜庢湁浜涘拰鎿嶄綔緋葷粺鐩稿叧鐨勫姛鑳斤紝鎴栬呮槸瀵規晥鐜囪姹傝緝楂樼殑妯″潡錛屾垜浠畬鍏ㄥ彲浠ラ氳繃C鍑芥暟鏉ュ疄鐜幫紝涔嬪悗鍐嶉氳繃Lua璋冪敤鎸囧畾鐨凜鍑芥暟銆傚浜庨偅浜涘彲琚獿ua璋冪敤鐨凜鍑芥暟鑰岃█錛屽叾鎺ュ彛蹇呴』閬靛驚Lua瑕佹眰鐨勫艦寮忥紝鍗?span style="color: #0000ff;">typedef int (*lua_CFunction)(lua_State* L)銆傜畝鍗曡鏄庝竴涓嬶紝璇ュ嚱鏁扮被鍨嬩粎浠呭寘鍚竴涓〃紺篖ua鐜鐨勬寚閽堜綔涓哄叾鍞竴鐨勫弬鏁幫紝瀹炵幇鑰呭彲浠ラ氳繃璇ユ寚閽堣繘涓姝ヨ幏鍙朙ua浠g爜涓疄闄呬紶鍏ョ殑鍙傛暟銆傝繑鍥炲兼槸鏁村瀷錛岃〃紺鴻C鍑芥暟灝嗚繑鍥炵粰Lua浠g爜鐨勮繑鍥炲兼暟閲忥紝濡傛灉娌℃湁榪斿洖鍊鹼紝鍒檙eturn 0鍗沖彲銆傞渶瑕佽鏄庣殑鏄紝C鍑芥暟鏃犳硶鐩存帴灝嗙湡姝g殑榪斿洖鍊艱繑鍥炵粰Lua浠g爜錛岃屾槸閫氳繃铏氭嫙鏍堟潵浼犻扡ua浠g爜鍜孋鍑芥暟涔嬮棿鐨勮皟鐢ㄥ弬鏁板拰榪斿洖鍊肩殑銆傝繖閲屾垜浠皢浠嬬粛涓ょLua璋冪敤C鍑芥暟鐨勮鍒欍?br />    1. C鍑芥暟浣滀負搴旂敤紼嬪簭鐨勪竴閮ㄥ垎銆?/span>

澶嶅埗浠g爜
1 #include <stdio.h>  
2
#include <string.h>
3
#include <lua.hpp>
4
#include <lauxlib.h>
5
#include <lualib.h>
6

7
//寰匧ua璋冪敤鐨凜娉ㄥ唽鍑芥暟銆?/span>
8
static int add2(lua_State* L)
9
{
10 //媯鏌ユ爤涓殑鍙傛暟鏄惁鍚堟硶錛?琛ㄧずLua璋冪敤鏃剁殑絎竴涓弬鏁?浠庡乏鍒板彸)錛屼緷姝ょ被鎺ㄣ?
11 //濡傛灉Lua浠g爜鍦ㄨ皟鐢ㄦ椂浼犻掔殑鍙傛暟涓嶄負number錛岃鍑芥暟灝嗘姤閿欏茍緇堟紼嬪簭鐨勬墽琛屻?/span>
12 double op1 = luaL_checknumber(L,1);
13 double op2 = luaL_checknumber(L,2);
14 //灝嗗嚱鏁扮殑緇撴灉鍘嬪叆鏍堜腑銆傚鏋滄湁澶氫釜榪斿洖鍊鹼紝鍙互鍦ㄨ繖閲屽嬈″帇鍏ユ爤涓?/span>
15 lua_pushnumber(L,op1 + op2);
16 //榪斿洖鍊肩敤浜庢彁紺鴻C鍑芥暟鐨勮繑鍥炲兼暟閲忥紝鍗沖帇鍏ユ爤涓殑榪斿洖鍊兼暟閲忋?/span>
17 return 1;
18 }
19
20 //鍙︿竴涓緟Lua璋冪敤鐨凜娉ㄥ唽鍑芥暟銆?/span>
21 static int sub2(lua_State* L)
22 {
23 double op1 = luaL_checknumber(L,1);
24 double op2 = luaL_checknumber(L,2);
25 lua_pushnumber(L,op1 - op2);
26 return 1;
27 }
28
29 const char* testfunc = "print(add2(1.0,2.0)) print(sub2(20.1,19))";
30
31 int main()
32 {
33 lua_State* L = luaL_newstate();
34 luaL_openlibs(L);
35 //灝嗘寚瀹氱殑鍑芥暟娉ㄥ唽涓篖ua鐨勫叏灞鍑芥暟鍙橀噺錛屽叾涓涓涓瓧絎︿覆鍙傛暟涓篖ua浠g爜
36 //鍦ㄨ皟鐢–鍑芥暟鏃朵嬌鐢ㄧ殑鍏ㄥ眬鍑芥暟鍚嶏紝絎簩涓弬鏁頒負瀹為檯C鍑芥暟鐨勬寚閽堛?/span>
37 lua_register(L, "add2", add2);
38 lua_register(L, "sub2", sub2);
39 //鍦ㄦ敞鍐屽畬鎵鏈夌殑C鍑芥暟涔嬪悗錛屽嵆鍙湪Lua鐨勪唬鐮佸潡涓嬌鐢ㄨ繖浜涘凡緇忔敞鍐岀殑C鍑芥暟浜嗐?/span>
40 if (luaL_dostring(L,testfunc))
41 printf("Failed to invoke.\n");
42 lua_close(L); 43 return 0; 44 }
澶嶅埗浠g爜

    2. C鍑芥暟搴撴垚涓篖ua鐨勬ā鍧椼?/span>
    灝嗗寘鍚獵鍑芥暟鐨勪唬鐮佺敓鎴愬簱鏂囦歡錛屽Linux鐨剆o錛屾垨Windows鐨凞LL錛屽悓鏃舵嫹璐濆埌Lua浠g爜鎵鍦ㄧ殑褰撳墠鐩綍錛屾垨鑰呮槸LUA_CPATH鐜鍙橀噺鎵鎸囧悜鐨勭洰褰曪紝浠ヤ究浜嶭ua瑙f瀽鍣ㄥ彲浠ユ紜畾浣嶅埌浠栦滑銆傚湪鎴戝綋鍓嶇殑Windows緋葷粺涓紝鎴戝皢鍏禼opy鍒?C:\Program Files\Lua\5.1\clibs\"錛岃繖閲屽寘鍚簡鎵鏈塋ua鍙皟鐢ㄧ殑C搴撱傝濡備笅C璇█浠g爜鍜屽叧閿ф敞閲婏細

澶嶅埗浠g爜
1 #include <stdio.h>  
2
#include <string.h>
3
#include <lua.hpp>
4
#include <lauxlib.h>
5
#include <lualib.h>
6

7
//寰呮敞鍐岀殑C鍑芥暟錛岃鍑芥暟鐨勫0鏄庡艦寮忓湪涓婇潰鐨勪緥瀛愪腑宸茬粡緇欏嚭銆?
8
//闇瑕佽鏄庣殑鏄紝璇ュ嚱鏁板繀欏諱互C鐨勫艦寮忚瀵煎嚭錛屽洜姝xtern "C"鏄繀欏葷殑銆?
9
//鍑芥暟浠g爜鍜屼笂渚嬬浉鍚岋紝榪欓噷涓嶅啀璧樿堪銆?/span>
10 extern "C" int add(lua_State* L)
11 { 12 double op1 = luaL_checknumber(L,1);
13 double op2 = luaL_checknumber(L,2);
14 lua_pushnumber(L,op1 + op2);
15 return 1;
16 }
17
18 extern "C" int sub(lua_State* L)
19 {
20 double op1 = luaL_checknumber(L,1);
21 double op2 = luaL_checknumber(L,2);
22 lua_pushnumber(L,op1 - op2);
23 return 1;
24 }
25
26 //luaL_Reg緇撴瀯浣撶殑絎竴涓瓧孌典負瀛楃涓詫紝鍦ㄦ敞鍐屾椂鐢ㄤ簬閫氱煡Lua璇ュ嚱鏁扮殑鍚嶅瓧銆?
27 //絎竴涓瓧孌典負C鍑芥暟鎸囬拡銆?
28 //緇撴瀯浣撴暟緇勪腑鐨勬渶鍚庝竴涓厓绱犵殑涓や釜瀛楁鍧囦負NULL錛岀敤浜庢彁紺篖ua娉ㄥ唽鍑芥暟宸茬粡鍒拌揪鏁扮粍鐨勬湯灝俱?/span>
29 static luaL_Reg mylibs[] = {
30 {"add", add},
31 {"sub", sub},
32 {NULL, NULL}
33 };
34
35 //璇搴撶殑鍞竴鍏ュ彛鍑芥暟銆傚叾鍑芥暟絳懼悕絳夊悓浜庝笂闈㈢殑娉ㄥ唽鍑芥暟銆傝濡備笅鍑犵偣璇存槑錛?
36 //1. 鎴戜滑鍙互灝嗚鍑芥暟綆鍗曠殑鐞嗚В涓烘ā鍧楃殑宸ュ巶鍑芥暟銆?
37 //2. 鍏跺嚱鏁板悕蹇呴』涓簂uaopen_xxx錛屽叾涓瓁xx琛ㄧずlibrary鍚嶇О銆侺ua浠g爜require "xxx"闇瑕佷笌涔嬪搴斻?
38 //3. 鍦╨uaL_register鐨勮皟鐢ㄤ腑錛屽叾絎竴涓瓧絎︿覆鍙傛暟涓烘ā鍧楀悕"xxx"錛岀浜屼釜鍙傛暟涓哄緟娉ㄥ唽鍑芥暟鐨勬暟緇勩?
39 //4. 闇瑕佸己璋冪殑鏄紝鎵鏈夐渶瑕佺敤鍒?xxx"鐨勪唬鐮侊紝涓嶈C榪樻槸Lua錛岄兘蹇呴』淇濇寔涓鑷達紝榪欐槸Lua鐨勭害瀹氾紝
40 // 鍚﹀垯灝嗘棤娉曡皟鐢ㄣ?/span>
41 extern "C" __declspec(dllexport)
42 int luaopen_mytestlib(lua_State* L)
43 {
44 const char* libName = "mytestlib";
45 luaL_register(L,libName,mylibs);
46 return 1;
47 }
澶嶅埗浠g爜

    瑙佸涓婰ua浠g爜錛?/p>

1 require "mytestlib"  --鎸囧畾鍖呭悕縐?/span> 
2
3 --鍦ㄨ皟鐢ㄦ椂錛屽繀欏繪槸package.function
4 print(mytestlib.add(1.0,2.0))
5 print(mytestlib.sub(20.1,19))


娌涙矝 2014-02-17 17:45 鍙戣〃璇勮
]]>
Step By Step(C璋冪敤Lua)http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205806.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:44:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205806.htmlhttp://www.shnenglu.com/mmdengwo/comments/205806.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205806.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205806.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205806.html闃呰鍏ㄦ枃

娌涙矝 2014-02-17 17:44 鍙戣〃璇勮
]]>
Step By Step(Lua-C API綆浠?http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205805.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:44:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205805.htmlhttp://www.shnenglu.com/mmdengwo/comments/205805.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205805.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205805.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205805.html   Lua鏄竴縐嶅祵鍏ュ紡鑴氭湰璇█錛屽嵆Lua涓嶆槸鍙互鍗曠嫭榪愯鐨勭▼搴忥紝鍦ㄥ疄闄呭簲鐢ㄤ腑錛屼富瑕佸瓨鍦ㄤ袱縐嶅簲鐢ㄥ艦寮忋傜涓縐嶅艦寮忔槸錛孋/C++浣滀負涓葷▼搴忥紝璋冪敤Lua浠g爜錛屾鏃跺彲浠ュ皢Lua鐪嬪仛“鍙墿灞曠殑璇█”錛屾垜浠皢榪欑搴旂敤縐頒負“搴旂敤紼嬪簭浠g爜”銆傜浜岀褰㈠紡鏄疞ua鍏鋒湁鎺у埗鏉冿紝鑰孋/C++浠g爜鍒欎綔涓篖ua鐨?#8220;搴撲唬鐮?#8221;銆傚湪榪欎袱縐嶅艦寮忎腑錛岄兘鏄氳繃Lua鎻愪緵鐨凜 API瀹屾垚涓ょ璇█涔嬮棿鐨勯氫俊鐨勩?br />
    1. 鍩虹鐭ヨ瘑錛?/span>
    C API鏄竴緇勮兘浣緾/C++浠g爜涓嶭ua浜や簰鐨勫嚱鏁般傚叾涓寘鎷鍐橪ua鍏ㄥ眬鍙橀噺銆佽皟鐢↙ua鍑芥暟銆佽繍琛屼竴孌礚ua浠g爜錛屼互鍙婃敞鍐孋鍑芥暟浠ヤ緵Lua浠g爜璋冪敤絳夈傝繖閲屽厛緇欏嚭涓涓畝鍗曠殑紺轟緥浠g爜錛?/p>
澶嶅埗浠g爜
 1 #include <stdio.h>
2 #include <string.h>
3 #include <lua.hpp>
4 #include <lauxlib.h>
5 #include <lualib.h>
6
7 int main(void)
8 {
9 const char* buff = "print(\"hello\")";
10 int error;
11 lua_State* L = luaL_newstate();
12 luaL_openlibs(L);
13
14 error = luaL_loadbuffer(L,buff,strlen(buff),"line") || lua_pcall(L,0,0,0);
15 int s = lua_gettop(L);
16 if (error) {
17 fprintf(stderr,"%s",lua_tostring(L,-1));
18 lua_pop(L,1);
19 }
20 lua_close(L);
21 return 0;
22 }
澶嶅埗浠g爜

    涓嬮潰鏄拡瀵逛互涓婁唬鐮佺粰鍑虹殑鍏蜂綋瑙i噴錛?br />    1). 涓婇潰鐨勪唬鐮佹槸鍩轟簬鎴戠殑C++宸ョ▼錛岃岄潪C宸ョ▼錛屽洜姝ゅ寘鍚殑澶存枃浠舵槸lua.hpp錛屽鏋滄槸C宸ョ▼錛屽彲浠ョ洿鎺ュ寘鍚玪ua.h銆?br />    2). Lua搴撲腑娌℃湁瀹氫箟浠諱綍鍏ㄥ眬鍙橀噺錛岃屾槸灝嗘墍鏈夌殑鐘舵侀兘淇濆瓨鍦ㄥ姩鎬佺粨鏋刲ua_State涓紝鍚庨潰鎵鏈夌殑C API閮介渶瑕佽鎸囬拡浣滀負絎竴涓弬鏁般?br />    3). luaL_openlibs鍑芥暟鏄敤浜庢墦寮Lua涓殑鎵鏈夋爣鍑嗗簱錛屽io搴撱乻tring搴撶瓑銆?br />    4). luaL_loadbuffer緙栬瘧浜哹uff涓殑Lua浠g爜錛屽鏋滄病鏈夐敊璇紝鍒欒繑鍥?錛屽悓鏃跺皢緙栬瘧鍚庣殑紼嬪簭鍧楀帇鍏ヨ櫄鎷熸爤涓?br />    5). lua_pcall鍑芥暟浼氬皢紼嬪簭鍧椾粠鏍堜腑寮瑰嚭錛屽茍鍦ㄤ繚鎶ゆā寮忎笅榪愯璇ョ▼搴忓潡銆傛墽琛屾垚鍔熻繑鍥?錛屽惁鍒欏皢閿欒淇℃伅鍘嬪叆鏍堜腑銆?br />    6). lua_tostring鍑芥暟涓殑-1錛岃〃紺烘爤欏剁殑绱㈠紩鍊鹼紝鏍堝簳鐨勭儲寮曞間負1錛屼互姝ょ被鎺ㄣ傝鍑芥暟灝嗚繑鍥炴爤欏剁殑閿欒淇℃伅錛屼絾鏄笉浼氬皢鍏朵粠鏍堜腑寮瑰嚭銆?br />    7). lua_pop鏄竴涓畯錛岀敤浜庝粠铏氭嫙鏍堜腑寮瑰嚭鎸囧畾鏁伴噺鐨勫厓绱狅紝榪欓噷鐨?琛ㄧず浠呭脊鍑烘爤欏剁殑鍏冪礌銆?br />    8). lua_close鐢ㄤ簬閲婃斁鐘舵佹寚閽堟墍寮曠敤鐨勮祫婧愩?br />
    2. 鏍堬細
    鍦↙ua鍜孋璇█涔嬮棿榪涜鏁版嵁浜ゆ崲鏃訛紝鐢變簬涓ょ璇█涔嬮棿鏈夌潃杈冨ぇ鐨勫樊寮傦紝姣斿Lua鏄姩鎬佺被鍨嬶紝C璇█鏄潤鎬佺被鍨嬶紝Lua鏄嚜鍔ㄥ唴瀛樼鐞嗭紝鑰孋璇█鍒欐槸鎵嬪姩鍐呭瓨綆$悊銆備負浜嗚В鍐寵繖浜涢棶棰橈紝Lua鐨勮璁¤呬嬌鐢ㄤ簡铏氭嫙鏍堜綔涓轟簩鑰呬箣闂存暟鎹氦浜掔殑浠嬭川銆傚湪C/C++紼嬪簭涓紝濡傛灉瑕佽幏鍙朙ua鐨勫鹼紝鍙渶璋冪敤Lua鐨凜 API鍑芥暟錛孡ua灝變細灝嗘寚瀹氱殑鍊煎帇鍏ユ爤涓傝灝嗕竴涓間紶緇橪ua鏃訛紝闇瑕佸厛灝嗚鍊煎帇鍏ユ爤錛岀劧鍚庤皟鐢↙ua鐨凜 API錛孡ua灝變細鑾峰彇璇ュ煎茍灝嗗叾浠庢爤涓脊鍑恒備負浜嗗彲浠ュ皢涓嶅悓綾誨瀷鐨勫煎帇鍏ユ爤錛屼互鍙婁粠鏍堜腑鍙栧嚭涓嶅悓綾誨瀷鐨勫鹼紝Lua涓烘瘡縐嶇被鍨嬪潎璁懼畾浜嗕竴涓壒瀹氬嚱鏁般?br />    1). 鍘嬪叆鍏冪礌錛?br />    Lua閽堝姣忕C綾誨瀷錛岄兘鏈変竴涓狢 API鍑芥暟涓庝箣瀵瑰簲錛屽錛?br />    void lua_pushnil(lua_State* L);  --nil鍊?/span>
    void lua_pushboolean(lua_State* L, int b); --甯冨皵鍊?/span>
    void lua_pushnumber(lua_State* L, lua_Number n); --嫻偣鏁?/span>
    void lua_pushinteger(lua_State* L, lua_Integer n);  --鏁村瀷
    void lua_pushlstring(lua_State* L, const char* s, size_t len); --鎸囧畾闀垮害鐨勫唴瀛樻暟鎹?/span>
    void lua_pushstring(lua_State* L, const char* s);  --浠ラ浂緇撳熬鐨勫瓧絎︿覆錛屽叾闀垮害鍙敱strlen寰楀嚭銆?/span>
    瀵逛簬瀛楃涓叉暟鎹紝Lua涓嶄細鎸佹湁浠栦滑鐨勬寚閽堬紝鑰屾槸璋冪敤鍦ˋPI鏃剁敓鎴愪竴涓唴閮ㄥ壇鏈紝鍥犳錛屽嵆浣垮湪榪欎簺鍑芥暟榪斿洖鍚庣珛鍒婚噴鏀炬垨淇敼榪欎簺瀛楃涓叉寚閽堬紝涔熶笉浼氭湁浠諱綍闂銆?br />    鍦ㄥ悜鏍堜腑鍘嬪叆鏁版嵁鏃訛紝鍙互閫氳繃璋冪敤涓嬮潰鐨勫嚱鏁板垽鏂槸鍚︽湁瓚沖鐨勬爤絀洪棿鍙敤錛屼竴鑸岃█錛孡ua浼氶鐣?0涓Ы浣嶏紝瀵逛簬鏅氬簲鐢ㄦ潵璇村凡緇忚凍澶熶簡錛岄櫎闈炴槸閬囧埌鏈夊緢澶氬弬鏁扮殑鍑芥暟銆?br />    int lua_checkstack(lua_State* L, int extra) --鏈熸湜寰楀埌extra鏁伴噺鐨勭┖闂叉Ы浣嶏紝濡傛灉涓嶈兘鎵╁睍騫惰幏寰楋紝榪斿洖false銆?/span> 
    
    2). 鏌ヨ鍏冪礌錛?br />    API浣跨敤“绱㈠紩”鏉ュ紩鐢ㄦ爤涓殑鍏冪礌錛岀涓涓帇鍏ユ爤鐨勪負1錛岀浜屼釜涓?錛屼緷姝ょ被鎺ㄣ傛垜浠篃鍙互浣跨敤璐熸暟浣滀負绱㈠紩鍊鹼紝鍏朵腑-1琛ㄧず涓烘爤欏跺厓绱狅紝-2涓烘爤欏朵笅闈㈢殑鍏冪礌錛屽悓鏍蜂緷姝ょ被鎺ㄣ?br />    Lua鎻愪緵浜嗕竴緇勭壒瀹氱殑鍑芥暟鐢ㄤ簬媯鏌ヨ繑鍥炲厓绱犵殑綾誨瀷錛屽錛?br />    int lua_isboolean (lua_State *L, int index);
    int lua_iscfunction (lua_State *L, int index);
    int lua_isfunction (lua_State *L, int index);
    int lua_isnil (lua_State *L, int index);
    int lua_islightuserdata (lua_State *L, int index);
    int lua_isnumber (lua_State *L, int index);
    int lua_isstring (lua_State *L, int index);
    int lua_istable (lua_State *L, int index);
    int lua_isuserdata (lua_State *L, int index);
    浠ヤ笂鍑芥暟錛屾垚鍔熻繑鍥?錛屽惁鍒欒繑鍥?銆傞渶瑕佺壒鍒寚鍑虹殑鏄紝瀵逛簬lua_isnumber鑰岃█錛屼笉浼氭鏌ュ兼槸鍚︿負鏁板瓧綾誨瀷錛岃屾槸媯鏌ュ兼槸鍚﹁兘杞崲涓烘暟瀛楃被鍨嬨?br />    Lua榪樻彁渚涗簡涓涓嚱鏁發ua_type錛岀敤浜庤幏鍙栧厓绱犵殑綾誨瀷錛屽嚱鏁板師鍨嬪涓嬶細
    int lua_type (lua_State *L, int index);
    璇ュ嚱鏁扮殑榪斿洖鍊間負涓緇勫父閲忓鹼紝鍒嗗埆鏄細LUA_TNIL銆丩UA_TNUMBER銆丩UA_TBOOLEAN銆丩UA_TSTRING銆丩UA_TTABLE銆丩UA_TFUNCTION銆丩UA_TUSERDATA銆丩UA_TTHREAD鍜孡UA_TLIGHTUSERDATA銆傝繖浜涘父閲忛氬父鐢ㄤ簬switch璇彞涓?br />    闄や簡涓婅堪鍑芥暟涔嬪錛孡ua榪樻彁渚涗簡涓緇勮漿鎹㈠嚱鏁幫紝濡傦細
    int lua_toboolean (lua_State *L, int index);
    lua_CFunction lua_tocfunction (lua_State *L, int index);
    lua_Integer lua_tointeger (lua_State *L, int index);    
    const char *lua_tolstring (lua_State *L, int index, size_t *len);
    lua_Number lua_tonumber (lua_State *L, int index);
    const void *lua_topointer (lua_State *L, int index);
    const char *lua_tostring (lua_State *L, int index);
    void *lua_touserdata (lua_State *L, int index);
    --string綾誨瀷榪斿洖瀛楃涓查暱搴︼紝table綾誨瀷榪斿洖鎿嶄綔絎?#'絳夊悓鐨勭粨鏋滐紝userdata綾誨瀷榪斿洖鍒嗛厤鐨勫唴瀛樺潡闀垮害銆?/span>
    size_t lua_objlen (lua_State *L, int index);銆
    瀵逛簬涓婅堪鍑芥暟錛屽鏋滆皟鐢ㄥけ璐ワ紝lua_toboolean銆乴ua_tonumber銆乴ua_tointeger鍜宭ua_objlen鍧囪繑鍥?錛岃屽叾浠栧嚱鏁板垯榪斿洖NULL銆傚湪寰堝鏃跺?涓嶆槸涓涓緢鏈夋晥鐨勭敤浜庡垽鏂敊璇殑鍊鹼紝浣嗘槸ANSI C娌℃湁鎻愪緵鍏朵粬鍙互琛ㄧず閿欒鐨勫箋傚洜姝ゅ浜庤繖浜涘嚱鏁幫紝鍦ㄦ湁浜涙儏鍐典笅闇瑕佸厛浣跨敤lua_is*緋誨垪鍑芥暟鍒ゆ柇鏄惁綾誨瀷姝g‘錛岃屽浜庡墿涓嬬殑鍑芥暟錛屽垯鍙互鐩存帴閫氳繃鍒ゆ柇榪斿洖鍊兼槸鍚︿負NULL鍗沖彲銆?br />    瀵逛簬lua_tolstring鍑芥暟榪斿洖鐨勬寚鍚戝唴閮ㄥ瓧絎︿覆鐨勬寚閽堬紝鍦ㄨ绱㈠紩鎸囧悜鐨勫厓绱犺寮瑰嚭涔嬪悗錛屽皢鏃犳硶淇濊瘉浠嶇劧鏈夋晥銆傝鍑芥暟榪斿洖鐨勫瓧絎︿覆鏈熬鍧囦細鏈変竴涓熬閮?銆?br />    涓嬮潰灝嗙粰鍑轟竴涓伐鍏峰嚱鏁幫紝鍙敤浜庢紨紺轟笂闈㈡彁鍒扮殑閮ㄥ垎鍑芥暟錛屽錛?/p>

澶嶅埗浠g爜
 1 static void stackDump(lua_State* L) 
2 {
3 int top = lua_gettop(L);
4 for (int i = 1; i <= top; ++i) {
5 int t = lua_type(L,i);
6 switch(t) {
7 case LUA_TSTRING:
8 printf("'%s'",lua_tostring(L,i));
9 break;
10 case LUA_TBOOLEAN:
11 printf(lua_toboolean(L,i) ? "true" : "false");
12 break;
13 case LUA_TNUMBER:
14 printf("%g",lua_tonumber(L,i));
15 break;
16 default:
17 printf("%s",lua_typename(L,t));
18 break;
19 }
20 printf("");
21 }
22 printf("\n");
23 }
澶嶅埗浠g爜

    3). 鍏跺畠鏍堟搷浣滃嚱鏁幫細
    闄や簡涓婇潰緇欏嚭鐨勬暟鎹氦鎹㈠嚱鏁頒箣澶栵紝Lua鐨凜 API榪樻彁渚涗簡涓緇勭敤浜庢搷浣滆櫄鎷熸爤鐨勬櫘閫氬嚱鏁幫紝濡傦細
    int lua_gettop(lua_State* L); --榪斿洖鏍堜腑鍏冪礌鐨勪釜鏁般?/span>
    void lua_settop(lua_State* L, int index); --灝嗘爤欏惰緗負鎸囧畾鐨勭儲寮曞箋?/span>
    void lua_pushvalue(lua_State* L, int index); --灝嗘寚瀹氱儲寮曠殑鍏冪礌鍓湰鍘嬪叆鏍堛?/span>
    void lua_remove(lua_State* L, int index); --鍒犻櫎鎸囧畾绱㈠紩涓婄殑鍏冪礌錛屽叾涓婇潰鐨勫厓绱犺嚜鍔ㄤ笅縐匯?/span>
    void lua_insert(lua_State* L, int index); --灝嗘爤欏跺厓绱犳彃鍏ュ埌璇ョ儲寮曞兼寚鍚戠殑浣嶇疆銆?/span>
    void lua_replace(lua_State* L, int index); --寮瑰嚭鏍堥《鍏冪礌錛屽茍灝嗚鍊艱緗埌鎸囧畾绱㈠紩涓娿?/span>
    Lua榪樻彁渚涗簡涓涓畯鐢ㄤ簬寮瑰嚭鎸囧畾鏁伴噺鐨勫厓绱狅細#define lua_pop(L,n)  lua_settop(L, -(n) - 1)    
    瑙佸涓嬬ず渚嬩唬鐮侊細

澶嶅埗浠g爜
 1 int main()
2 {
3 lua_State* L = luaL_newstate();
4 lua_pushboolean(L,1);
5 lua_pushnumber(L,10);
6 lua_pushnil(L);
7 lua_pushstring(L,"hello");
8 stackDump(L); //true 10 nil 'hello'
9
10 lua_pushvalue(L,-4);
11 stackDump(L); //true 10 nil 'hello' true
12
13 lua_replace(L,3);
14 stackDump(L); //true 10 true 'hello'
15
16 lua_settop(L,6);
17 stackDump(L); //true 10 true 'hello' nil nil
18
19 lua_remove(L,-3);
20 stackDump(L); //true 10 true nil nil
21
22 lua_settop(L,-5);
23 stackDump(L); //true
24
25 lua_close(L);
26 return 0;
27 }
澶嶅埗浠g爜


    3. C API涓殑閿欒澶勭悊錛?/span>
    1). C紼嬪簭璋冪敤Lua浠g爜鐨勯敊璇鐞嗭細
    閫氬父鎯呭喌涓嬶紝搴旂敤紼嬪簭浠g爜鏄互“鏃犱繚鎶?#8221;妯″紡榪愯鐨勩傚洜姝わ紝褰揕ua鍙戠幇“鍐呭瓨涓嶈凍”榪欑被閿欒鏃訛紝鍙兘閫氳繃璋冪敤“绱ф?#8221;鍑芥暟鏉ラ氱煡C璇█紼嬪簭錛屼箣鍚庡湪緇撴潫搴旂敤紼嬪簭銆傜敤鎴峰彲閫氳繃lua_atpanic鏉ヨ緗嚜宸辯殑“绱ф?#8221;鍑芥暟銆傚鏋滃笇鏈涘簲鐢ㄧ▼搴忎唬鐮佸湪鍙戠敓Lua閿欒鏃朵笉浼氶鍑猴紝鍙氳繃璋冪敤lua_pcall鍑芥暟浠ヤ繚鎶ゆā寮忚繍琛孡ua浠g爜銆傝繖鏍峰啀鍙戠敓鍐呭瓨閿欒鏃訛紝lua_pcall浼氳繑鍥炰竴涓敊璇唬鐮侊紝騫跺皢瑙i噴鍣ㄩ噸緗負涓鑷寸殑鐘舵併傚鏋滆淇濇姢涓嶭ua鐨凜浠g爜錛屽彲浠ヤ嬌鐢?span style="color: #0000ff;">lua_cpall
鍑芥暟錛屽畠灝嗘帴鍙椾竴涓狢鍑芥暟浣滀負鍙傛暟錛岀劧鍚庤皟鐢ㄨ繖涓狢鍑芥暟銆?br />    
    2). Lua璋冪敤C紼嬪簭錛?br />    閫氬父鑰岃█錛屽綋涓涓Lua璋冪敤鐨凜鍑芥暟媯嫻嬪埌閿欒鏃訛紝瀹冨氨搴旇璋冪敤lua_error錛岃鍑芥暟浼氭竻鐞哃ua涓墍鏈夐渶瑕佹竻鐞嗙殑璧勬簮錛岀劧鍚庤煩杞洖鍙戣搗鎵ц鐨勯偅涓猯ua_pcall錛屽茍闄勪笂涓鏉¢敊璇俊鎭?/p>

娌涙矝 2014-02-17 17:44 鍙戣〃璇勮
]]>
Step By Step(Lua緋葷粺搴?http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205804.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:43:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205804.htmlhttp://www.shnenglu.com/mmdengwo/comments/205804.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205804.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205804.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205804.html  Lua涓轟簡淇濊瘉楂樺害鐨勫彲縐繪鎬э紝鍥犳錛屽畠鐨勬爣鍑嗗簱浠呬粎鎻愪緵浜嗛潪甯稿皯鐨勫姛鑳斤紝鐗瑰埆鏄拰OS鐩稿叧鐨勫簱銆備絾鏄疞ua榪樻彁渚涗簡涓浜涙墿灞曞簱錛屾瘮濡侾osix搴撶瓑銆傚浜庢枃浠舵搷浣滆岃█錛岃搴撲粎鎻愪緵浜?span style="color: #0000ff;">os.rename鍑芥暟鍜?span style="color: #0000ff;">os.remove鍑芥暟銆?br />    
    1. 鏃ユ湡鍜屾椂闂達細
    鍦↙ua涓紝鍑芥暟time鍜?span style="color: #0000ff;">date鎻愪緵浜嗘墍鏈夌殑鏃ユ湡鍜屾椂闂村姛鑳姐?br />    濡傛灉涓嶅甫浠諱綍鍙傛暟璋冪敤time鍑芥暟錛屽畠灝嗕互鏁板瓧褰㈠紡榪斿洖褰撳墠鐨勬棩鏈熷拰鏃墮棿銆傚鏋滀互涓涓猼able浣滀負鍙傛暟錛屽畠灝嗚繑鍥炰竴涓暟瀛楋紝琛ㄧず璇able涓墍鎻忚堪鐨勬棩鏈熷拰鏃墮棿銆傝table鐨勬湁鏁堝瓧孌靛涓嬶細

瀛楁鍚?/span>鎻忚堪
year涓涓畬鏁寸殑騫翠喚
month01-12
day01-31
hour00-23
min00-59
sec00-59
isdst甯冨皵鍊鹼紝true琛ㄧず澶忎護鏃?/span>

    print(os.time{year = 1970, month = 1, day = 1, hour = 8, min = 0}) --鍖椾含鏄笢鍏尯錛屾墍浠our絳変簬鏃惰〃紺篣TC鐨?銆?/span>
    print(os.time())  --杈撳嚭褰撳墠鏃墮棿璺濈1970-1-1 00:00:00鎵緇忚繃鐨勭鏁般傝緭鍑哄間負 1333594721
    鍑芥暟date鏄痶ime鐨勫弽鍑芥暟錛屽嵆鍙互灝唗ime榪斿洖鐨勬暟瀛楀艱漿鎹負鏇撮珮綰х殑鍙鏍煎紡錛屽叾絎竴涓弬鏁版槸鏍煎紡鍖栧瓧絎︿覆錛岃〃紺烘湡鏈涚殑鏃ユ湡榪斿洖鏍煎紡錛岀浜屼釜鍙傛暟鏄棩鏈熷拰鏃墮棿鐨勬暟瀛楋紝緙虹渷涓哄綋鍓嶆棩鏈熷拰鏃墮棿銆傚錛?/p>

澶嶅埗浠g爜
 1 dd = os.date("*t",os.time())  --濡傛灉鏍煎紡鍖栧瓧絎︿覆涓?*t"錛屽嚱鏁板皢榪斿洖table褰㈠紡鐨勬棩鏈熷璞°?/span>濡傛灉涓?!*t"錛屽垯琛ㄧず涓篣TC鏃墮棿鏍煎紡銆?br /> 2 print("year = " .. dd.year)
3 print("month = " .. dd.month)
4 print("day = " .. dd.day)
5 print("weekday = " .. dd.wday) --涓涓槦鏈熶腑鐨勭鍑犲ぉ錛屽懆鏃ユ槸絎竴澶?/span>
6 print("yearday = " .. dd.yday) --涓騫翠腑鐨勭鍑犲ぉ錛?鏈?鏃ユ槸絎竴澶?/span>
7 print("hour = " .. dd.hour)
8 print("min = " .. dd.min)
9 print("sec = " .. dd.sec)
10
11 --[[
12 year = 2012
13 month = 4
14 day = 5
15 weekday = 5
16 yearday = 96
17 hour = 11
18 min = 13
19 sec = 44
20 --]]
澶嶅埗浠g爜

    date鍑芥暟鐨勬牸寮忓寲鏍囪瘑鍜孋榪愯鏃跺簱涓殑strftime鍑芥暟鐨勬爣璇嗗畬鍏ㄧ浉鍚岋紝瑙佷笅琛細

鍏抽敭瀛?/span>鎻忚堪
%a涓鏄熸湡涓ぉ鏁扮殑緙╁啓錛屽Wed
%A涓鏄熸湡涓ぉ鏁扮殑鍏ㄧО錛屽Friday
%b鏈堜喚鐨勭緝鍐欙紝濡係ep
%B鏈堜喚鐨勫叏縐幫紝濡係eptember
%c鏃ユ湡鍜屾椂闂?/span>
%d涓涓湀涓殑絎嚑澶?01-31)
%H24灝忔椂鍒朵腑鐨勫皬鏃舵暟(00-23)
%I12灝忔椂鍒朵腑鐨勫皬鏃舵暟(01-12)
%j涓騫翠腑鐨勭鍑犲ぉ(001-366)
%M鍒嗛挓(00-59)
%m鏈堜喚(01-12)
%p"涓婂崍(am)"鎴?涓嬪崍(pm)"
%S縐掓暟(00-59)
%w涓鏄熸湡涓殑絎嚑澶?0--6絳変環浜庢槦鏈熸棩--鏄熸湡鍏?
%x鏃ユ湡錛屽09/16/2010
%X鏃墮棿錛屽23:48:20
%y涓や綅鏁扮殑騫翠喚(00-99)
%Y瀹屾暣鐨勫勾浠?2012)
%%瀛楃'%'

    print(os.date("%Y-%m-%d"))  --杈撳嚭2012-04-05
    鍑芥暟os.clock()榪斿洖CPU鏃墮棿鐨勬弿榪幫紝閫氬父鐢ㄤ簬璁$畻涓孌典唬鐮佺殑鎵ц鏁堢巼銆傚錛?/p>

澶嶅埗浠g爜
1 local x = os.clock()
2 local s = 0
3 for i = 1, 10000000 do
4 s = s + i
5 end
6 print(string.format("elapsed time: %.2f\n", os.clock() - x))
7
8 --杈撳嚭緇撴灉涓猴細
9 --elapsed time: 0.21
澶嶅埗浠g爜


    2. 鍏朵粬緋葷粺璋冪敤錛?/span>
    鍑芥暟os.exit()鍙腑姝㈠綋鍓嶇▼搴忕殑鎵ц銆傚嚱鏁?span style="color: #0000ff;">os.getenv()
鍙幏鍙栦竴涓幆澧冨彉閲忕殑鍊箋傚錛?br />    print(os.getenv("PATH"))  --濡傛灉鐜鍙橀噺涓嶅瓨鍦紝榪斿洖nil銆?/span>
    os.execute鍑芥暟鐢ㄤ簬鎵ц鍜屾搷浣滅郴緇熺浉鍏崇殑鍛戒護錛屽錛?br />    os.execute("mkdir " .. "hello")



娌涙矝 2014-02-17 17:43 鍙戣〃璇勮
]]>
Step By Step(Lua杈撳叆杈撳嚭搴?http://www.shnenglu.com/mmdengwo/archive/2014/02/17/205803.html娌涙矝娌涙矝Mon, 17 Feb 2014 09:43:00 GMThttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205803.htmlhttp://www.shnenglu.com/mmdengwo/comments/205803.htmlhttp://www.shnenglu.com/mmdengwo/archive/2014/02/17/205803.html#Feedback0http://www.shnenglu.com/mmdengwo/comments/commentRss/205803.htmlhttp://www.shnenglu.com/mmdengwo/services/trackbacks/205803.html  I/O搴撲負鏂囦歡鎿嶄綔鎻愪緵浜嗕袱縐嶄笉鍚岀殑妯″瀷錛岀畝鍗曟ā鍨嬪拰瀹屾暣妯″瀷銆傜畝鍗曟ā鍨嬪亣璁句竴涓綋鍓嶈緭鍏ユ枃浠跺拰涓涓綋鍓嶈緭鍑烘枃浠訛紝浠栫殑I/O鎿嶄綔鍧囦綔鐢ㄤ簬榪欎簺鏂囦歡銆傚畬鏁存ā鍨嬪垯浣跨敤鏄懼紡鐨勬枃浠跺彞鏌勶紝騫跺皢鎵鏈夌殑鎿嶄綔瀹氫箟涓烘枃浠跺彞鏌勪笂鐨勬柟娉曘?br />    1. 綆鍗曟ā鍨嬶細
    I/O搴撲細灝嗚繘紼嬫爣鍑嗚緭鍏ヨ緭鍑轟綔涓哄叾緙虹渷鐨勮緭鍏ユ枃浠跺拰杈撳嚭鏂囦歡銆傛垜浠彲浠ラ氳繃io.input(filename)鍜?span style="color: #0000ff;">io.output(filename)榪欎袱涓嚱鏁版潵鏀瑰彉褰撳墠鐨勮緭鍏ヨ緭鍑烘枃浠躲?br />    1). io.write鍑芥暟錛?br />    鍑芥暟鍘熷瀷涓篿o.write(...)銆傝鍑芥暟灝嗘墍鏈夊弬鏁伴『搴忕殑鍐欏叆鍒板綋鍓嶈緭鍑烘枃浠朵腑銆傚錛?br />    io.write("hello","world") --鍐欏嚭鐨勫唴瀹逛負helloworld

    2). io.read鍑芥暟錛?br />    涓嬭〃緇欏嚭浜嗚鍑芥暟鍙傛暟鐨勫畾涔夊拰鍔熻兘鎻忚堪錛?/p>
鍙傛暟瀛楃涓?/span>鍚箟
"*all"璇誨彇鏁翠釜鏂囦歡
"*line"璇誨彇涓嬩竴琛?/span>
"*number"璇誨彇涓涓暟瀛?/span>
<num>璇誨彇涓涓笉瓚呰繃<num>涓瓧絎︾殑瀛楃涓?/span>

    璋冪敤io.read("*all")浼氳鍙栧綋鍓嶈緭鍏ユ枃浠剁殑鎵鏈夊唴瀹癸紝浠ュ綋鍓嶄綅緗綔涓哄紑濮嬨傚鏋滃綋鍓嶄綅緗浜庢枃浠剁殑鏈熬錛屾垨鑰呮枃浠朵負絀猴紝閭d釜璇ヨ皟鐢ㄨ繑鍥炰竴涓┖瀛楃涓層傜敱浜嶭ua鍙互楂樻晥鐨勫鐞嗛暱瀛楃涓詫紝鍥犳鍦↙ua涓彲浠ュ厛灝嗘暟鎹粠鏂囦歡涓畬鏁磋鍑猴紝涔嬪悗鍦ㄩ氳繃Lua瀛楃涓插簱鎻愪緵鐨勫嚱鏁拌繘琛屽悇縐嶅鐞嗐?br />    璋冪敤io.read("*line")浼氳繑鍥炲綋鍓嶆枃浠剁殑涓嬩竴琛岋紝浣嗕笉鍖呭惈鎹㈣絎︺傚綋鍒拌揪鏂囦歡鏈熬鏃訛紝璇ヨ皟鐢ㄨ繑鍥瀗il銆傚錛?/p>

澶嶅埗浠g爜
1 for count = 1,math.huge do
2 local line = io.read("*line") --濡傛灉涓嶄紶鍙傛暟錛岀己鐪佸間篃鏄?*line"
3 if line == nil then
4 break
5 end
6 io.write(string.format("%6d ",count),line,"\n")
7 end
澶嶅埗浠g爜

    濡傛灉鍙槸涓轟簡榪唬鏂囦歡涓殑鎵鏈夎錛屽彲浠ヤ嬌鐢?span style="color: #0000ff;">io.lines鍑芥暟錛屼互榪唬鍣ㄧ殑褰㈠紡璁塊棶鏂囦歡涓殑姣忎竴琛屾暟鎹紝濡傦細

澶嶅埗浠g爜
1 local lines = {}
2 for line in io.lines() do --閫氳繃榪唬鍣ㄨ闂瘡涓涓暟鎹?/span>
3 lines[#lines + 1] = line
4 end
5 table.sort(lines) --鎺掑簭錛孡ua鏍囧噯搴撶殑table搴撴彁渚涚殑鍑芥暟銆?/span>
6 for _,l in ipairs(lines) do
7 io.write(l,"\n")
8 end
澶嶅埗浠g爜

    璋冪敤io.read("*number")浼氫粠褰撳墠杈撳叆鏂囦歡涓鍙栦竴涓暟瀛椼傛鏃秗ead灝嗙洿鎺ヨ繑鍥炰竴涓暟瀛楋紝鑰屼笉鏄瓧絎︿覆銆?*number"閫夐」浼氬拷鐣ユ暟瀛楀墠闈㈡墍鏈夌殑絀烘牸錛屽茍涓旇兘澶勭悊鍍?3銆?5.2榪欐牱鐨勬暟瀛楁牸寮忋傚鏋滃綋鍓嶈鍙栫殑鏁版嵁涓嶆槸鍚堟硶鐨勬暟瀛楋紝read榪斿洖nil銆傚湪璋冪敤read鏄彲浠ユ寚瀹氬涓夐」錛屽嚱鏁頒細鏍規嵁姣忎釜閫夐」鍙傛暟榪斿洖鐩稿簲鐨勫唴瀹廣傚錛?/p>

澶嶅埗浠g爜
 1 --[[
2 6.0 -3.23 1000
3 ... ...
4 涓嬮潰鐨勪唬鐮佽鍙栨敞閲婁腑鐨勬暟瀛?br /> 5 --]]
6 while true do
7 local n1,n2,n3 = io.read("*number","*number","*number")
8 if not n1 then
9 break
10 end
11 print(math.max(n1,n2,n3))
12 end
澶嶅埗浠g爜

    璋冪敤io.read(<num>)浼氫粠杈撳叆鏂囦歡涓渶澶氳鍙杗涓瓧絎︼紝濡傛灉璇諱笉鍒頒換浣曞瓧絎︼紝榪斿洖nil銆傚惁鍒欒繑鍥炶鍙栧埌鐨勫瓧絎︿覆銆傚錛?/p>

澶嶅埗浠g爜
1 while true do
2 local block = io.read(2^13)
3 if not block then
4 break
5 end
6 io.write(block)
7 end
澶嶅埗浠g爜

    io.read(0)鏄竴縐嶇壒孌婄殑鎯呭喌錛岀敤浜庢鏌ユ槸鍚﹀埌杈句簡鏂囦歡鐨勬湯灝俱傚鏋滄病鏈夊埌杈撅紝榪斿洖絀哄瓧絎︿覆錛屽惁鍒檔il銆?br />
    2. 瀹屾暣I/O妯″瀷錛?/span>
    Lua涓畬鏁碔/O妯″瀷鐨勪嬌鐢ㄦ柟寮忛潪甯哥被浼間簬C榪愯鏃跺簱鐨勬枃浠舵搷浣滃嚱鏁幫紝瀹冧滑閮芥槸鍩轟簬鏂囦歡鍙ユ焺鐨勩?br />    1). 閫氳繃io.open鍑芥暟鎵撳紑鎸囧畾鐨勬枃浠訛紝騫朵笖鍦ㄥ弬鏁頒腑緇欏嚭瀵硅鏂囦歡鐨勬墦寮妯″紡錛屽叾涓?span style="color: #0000ff;">"r"
琛ㄧず璇誨彇錛?span style="color: #0000ff;">"w"琛ㄧず瑕嗙洊鍐欏叆錛屽嵆鍏堝垹闄ゆ枃浠跺師鏈夌殑鍐呭錛?span style="color: #0000ff;">"a"琛ㄧず榪藉姞寮忓啓鍏ワ紝"b"琛ㄧず浠ヤ簩榪涘埗鐨勬柟寮忔墦寮鏂囦歡銆傚湪鎴愬姛鎵撳紑鏂囦歡鍚庯紝璇ュ嚱鏁板皢榪斿洖琛ㄧず璇ユ枃浠剁殑鍙ユ焺錛屽悗闈㈡墍鏈夊熀浜庤鏂囦歡鐨勬搷浣滐紝閮介渶瑕佸皢璇ュ彞鏌勪綔涓哄弬鏁頒紶鍏ャ傚鏋滄墦寮澶辮觸錛岃繑鍥瀗il銆傚叾涓敊璇俊鎭敱璇ュ嚱鏁扮殑絎簩涓弬鏁拌繑鍥烇紝濡傦細
    assert(io.open(filename,mode))  --濡傛灉鎵撳紑澶辮觸錛宎ssert灝嗘墦鍗扮浜屼釜鍙傛暟緇欏嚭鐨勯敊璇俊鎭?/span>
    
    2). 鏂囦歡璇誨啓鍑芥暟read/write銆傝繖閲岄渶瑕佺敤鍒板啋鍙瘋娉曪紝濡傦細

1 local f = assert(io.open(filename,"r"))
2 local t = f:read("*all") --瀵逛簬read鑰岃█錛屽叾鍙傛暟瀹屽叏絳夊悓浜庣畝鍗曟ā鍨嬩笅read鐨勫弬鏁般?/span>
3 f:close()

    姝ゅ錛孖/O搴撹繕鎻愪緵浜?涓瀹氫箟鐨勬枃浠跺彞鏌勶紝鍗?span style="color: #0000ff;">io.stdin(鏍囧噯杈撳叆)銆乮o.stdout(鏍囧噯杈撳嚭)銆乮o.stderr(鏍囧噯閿欒杈撳嚭)銆傚錛?br />    io.stderr:write("This is an error message.")
    浜嬪疄涓婏紝鎴戜滑涔熷彲浠ユ販鍚堜嬌鐢ㄧ畝鍗曟ā寮忓拰瀹屾暣妯″紡錛屽錛?/p>

1 local temp = io.input()   --灝嗗綋鍓嶆枃浠跺彞鏌勪繚瀛?/span>
2 io.input("newInputfile") --鎵撳紑鏂扮殑杈撳叆鏂囦歡
3 io.input():close() --鍏抽棴褰撳墠鏂囦歡
4 io.input(temp) --鎭㈠鍘熸潵鐨勮緭鍏ユ枃浠?/span>


    3). 鎬ц兘灝忔妧宸э細
    鐢變簬涓嬈℃ц鍙栨暣涓枃浠舵瘮閫愯璇誨彇瑕佸揩涓浜涳紝浣嗗浜庤緝澶х殑鏂囦歡錛岃繖鏍峰茍涓嶅彲琛岋紝鍥犳Lua鎻愪緵浜嗕竴縐嶆姌涓殑鏂瑰紡錛屽嵆涓嬈¤鍙栨寚瀹氬瓧鑺傛暟閲忕殑鏁版嵁錛屽鏋滃綋鍓嶈鍙栦腑鐨勬渶鍚庝竴琛屼笉鏄畬鏁寸殑涓琛岋紝鍙氳繃璇ユ柟寮忓皢璇ヨ鐨勫墿浣欓儴鍒嗕篃涓騫惰鍏ワ紝浠庤屼繚璇佹湰嬈¤鍙栫殑鏁版嵁鍧囦負鏁磋鏁版嵁錛屼互渚夸簬涓婂眰閫昏緫鐨勫鐞嗐傚錛?br />    local lines,rest = f:read(BUFSIZE,"*line") --rest鍙橀噺鍖呭惈鏈鍚庝竴琛屼腑娌℃湁璇誨彇鐨勯儴鍒嗐?/span>
    涓嬮潰鏄疭hell涓瓀c鍛戒護鐨勪竴涓畝鍗曞疄鐜般?/p>

澶嶅埗浠g爜
 1 local BUFSIZE = 8192
2 local f = io.input(arg[1]) --鎵撳紑杈撳叆鏂囦歡
3 local cc, lc, wc, = 0, 0, 0 --鍒嗗埆璁℃暟瀛楃銆佽鍜屽崟璇?
4 while true do
5 local lines,rest = f:read(BUFSIZE,"*line")
6 if not lines then
7 break
8 end
9 if rest then
10 lines = lines .. rest .. "\n"
11 end
12 cc = cc + #lines
13 --璁$畻鍗曡瘝鏁伴噺
14 local _, t = string.gsub(lines."%S+","")
15 wc = wc + t
16 --璁$畻琛屾暟
17 _,t = string.gsub(line,"\n","\n")
18 lc = lc + t
19 end
20 print(lc,wc,cc)
澶嶅埗浠g爜


    4). 鍏跺畠鏂囦歡鎿嶄綔錛?br />    濡?span style="color: #0000ff;">io.flush鍑芥暟浼氬皢io緙撳瓨涓殑鏁版嵁鍒鋒柊鍒扮鐩樻枃浠朵笂銆?span style="color: #0000ff;">io.close鍑芥暟灝嗗叧闂綋鍓嶆墦寮鐨勬枃浠躲?span style="color: #0000ff;">io.seek鍑芥暟鐢ㄤ簬璁劇疆鎴栬幏鍙栧綋鍓嶆枃浠剁殑璇誨啓浣嶇疆錛屽叾鍑芥暟鍘熷瀷涓?span style="color: #0000ff;">f:seek(whence,offset)錛屽鏋渨hence鐨勫間負"set"錛宱ffset鐨勫煎垯琛ㄧず涓虹浉瀵逛簬鏂囦歡璧峰浣嶇疆鐨勫亸縐婚噺銆傚涓?span style="color: #0000ff;">"cur"(榛樿鍊?,offset鍒欎負鐩稿浜庡綋鍓嶄綅緗殑鍋忕Щ閲忥紝濡備負"end"錛屽垯涓虹浉瀵逛簬鏂囦歡鏈熬鐨勫亸縐婚噺銆傚嚱鏁扮殑榪斿洖鍊間笌whence鍙傛暟鏃犲叧錛屾繪槸榪斿洖鏂囦歡鐨勫綋鍓嶄綅緗紝鍗崇浉瀵逛簬鏂囦歡璧峰澶勭殑鍋忕Щ瀛楄妭鏁般俹ffset鐨勯粯璁ゅ間負0銆傚錛?/p>

1 function fsize(file)
2 local current = file:seek() --鑾峰彇褰撳墠浣嶇疆
3 local size = file:seek("end") --鑾峰彇鏂囦歡澶у皬
4 file:seek("set",current) --鎭㈠鍘熸湁鐨勫綋鍓嶄綅緗?/span>
5 return size
6 end

    鏈鍚庨渶瑕佹寚鍑虹殑鏄紝濡傛灉鍙戠敓閿欒錛屾墍鏈夎繖浜涘嚱鏁板潎榪斿洖nil鍜屼竴鏉¢敊璇俊鎭?/p>

娌涙矝 2014-02-17 17:43 鍙戣〃璇勮
]]>
日本精品久久久中文字幕| 99精品久久久久中文字幕| 久久久久这里只有精品 | 97精品依人久久久大香线蕉97| 久久无码人妻一区二区三区午夜| 99久久成人国产精品免费| 国内精品久久久久国产盗摄| 欧美黑人激情性久久| 99久久精品国产一区二区| 久久久精品国产| 国产精品内射久久久久欢欢| 久久精品国产亚洲AV不卡| 91久久香蕉国产熟女线看| 一本一本久久A久久综合精品| 精品久久久久久国产牛牛app| 日产精品久久久久久久| 三级韩国一区久久二区综合| 久久久久久a亚洲欧洲aⅴ | 精品亚洲综合久久中文字幕| 中文字幕无码av激情不卡久久| 国产精品99久久免费观看| 久久丫忘忧草产品| 久久久这里有精品中文字幕| 青青青国产成人久久111网站| 精品久久久久香蕉网| 久久99久久99精品免视看动漫 | 国产精品一久久香蕉国产线看观看| 伊人久久国产免费观看视频| 精品久久久久久无码中文字幕| 国产情侣久久久久aⅴ免费| 久久婷婷五月综合97色直播| 亚洲精品无码久久毛片| 久久久精品人妻无码专区不卡 | 日韩久久久久久中文人妻 | 国产麻豆精品久久一二三| 亚洲国产精品无码久久一区二区| 欧美激情一区二区久久久| 久久性精品| 国内精品伊人久久久久777| 一本色道久久99一综合| 久久精品国产精品亚洲精品 |