• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            colorful

            zc qq:1337220912

             

            Boost 1.46.1編譯成VS2008版本

            今天Boost.org上下載了Boost的最新版本1.46.1,然后編譯成VS2008的可用版本,總耗時(shí)大概20分鐘左右。步驟如下:

            1. 至Boost.org上下載Window下的Boost最新版 http://sourceforge.net/projects/boost/files/boost/1.46.1/ PS: 我下載的后綴為.7z的壓縮版本。

            2. 解壓至本地硬盤,我解壓在D:/boost_1_46_1下。

            3. 編譯得到bjam.exe. 進(jìn)入VS2008的Command Prompt,(一定要是這個(gè),不能是cmd)轉(zhuǎn)目錄至D:/boost_1_46_1/tools/build/v2,然后執(zhí)行批處理bootstrap.bat后,得到bjam.exe, 將其拷至Boost根目錄下(即:D:/boost_1_46_1)

            4. 利用bjam.exe編譯得到Boost的lib文件。將VS2008的Command Prompt的執(zhí)行目錄轉(zhuǎn)至D:/boost_1_46_1,然后輸入:bjam --toolset=msvc-9.0 --build-type=complete stage 后開始編譯,大概20分鐘后,編譯完成。生成的庫(kù)文件位于D:/boost_1_46_1/stage/lib下。

            5. 在VS2008中,設(shè)置include路徑和lib路徑后,即可使用Boost最新版。


            注:如果第4步僅輸入bjam或直接點(diǎn)擊bjam.exe執(zhí)行,則生成的庫(kù)文件為VS2010的庫(kù)文件(形如:boost_filesystem-vc100-mt-1_46_1.lib).



            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            VS2008下直接安裝使用Boost庫(kù)1.46.1版本

            分類: 1.1 C/C++ 2711人閱讀 評(píng)論(10) 收藏 舉報(bào)

                  Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的發(fā)動(dòng)機(jī)之一。 Boost庫(kù)由C++標(biāo)準(zhǔn)委員會(huì)庫(kù)工作組成員發(fā)起,其中有些內(nèi)容有望成為下一代C++標(biāo)準(zhǔn)庫(kù)內(nèi)容。在C++社區(qū)中影響甚大,是不折不扣的“準(zhǔn)”標(biāo)準(zhǔn)庫(kù)。 Boost由于其對(duì)跨平臺(tái)的強(qiáng)調(diào),對(duì)標(biāo)準(zhǔn)C++的強(qiáng)調(diào),與編寫平臺(tái)無(wú)關(guān)。大部分boost庫(kù)功能的使用只需包括相應(yīng)頭文件即可,少數(shù)(如正則表達(dá)式庫(kù),文件系統(tǒng)庫(kù)等)需要鏈接庫(kù)。但Boost中也有很多是實(shí)驗(yàn)性質(zhì)的東西,在實(shí)際的開發(fā)中實(shí)用需要謹(jǐn)慎。boost 在一些播放軟件和音效中指增強(qiáng),比如Bass Boost,低音增強(qiáng)。

            1.下載最新版的BOOST庫(kù),當(dāng)前最新版為1.46.1(2011-3-12發(fā)布),下載鏈接地址:http://sourceforge.net/projects/boost/files/boost/1.46.1/

            2.解壓到硬盤上,其目錄構(gòu)造為

            boost_1_46_1/ ................................boost根目錄 
               index.htm ..................... www.boost.org 網(wǎng)站首頁(yè) 
               boost/ ..............................所有的Boost頭文件 
               lib/ .................................預(yù)編譯的二進(jìn)制庫(kù) 
               libs/ ......................庫(kù)的Tests, .cpps, docs等等 
                 index.html .............................庫(kù)文檔開始處 
                 algorithm/ 
                 any/ 
                 array/ 
                                 …more libraries… 
               status/ .........................Boost-wide test suite 
               tools/ ...........實(shí)用工具, e.g. bjam, quickbook, bcp 
               more/ .......................................一些文檔 
               doc/ ...............................所有庫(kù)文檔的一部分 

            3.打開根目錄下的index.html,在上面的“Getting Started”有介紹怎么開始使用Boost的,大部分的Boost庫(kù)只需要包含頭文件即可,少部分需要編譯鏈接。以下是必須編譯的Boost庫(kù):
                * Boost.Filesystem
                * Boost.GraphParallel
                * Boost.IOStreams
                * Boost.MPI
                * Boost.ProgramOptions
                * Boost.Python
                * Boost.Regex
                * Boost.Serialization
                * Boost.Signals
                * Boost.System
                * Boost.Thread
                * Boost.Wave
            另外,一些庫(kù)可以是可選擇編譯的:
                * Boost.DateTime (只有當(dāng)你需要使用它的to_string/from_string或者serialization features, or if you're targeting Visual C++ 6.x or Borland.
                * Boost.Graph (只有當(dāng)你傾向解析 GraphViz 文件)
                * Boost.Math (the TR1 and C99 cmath functions)
                * Boost.Random (當(dāng)你需要使用random_device的時(shí)候)
                * Boost.Test (can be used in “header-only” or “separately compiled” mode)
            4.下面開始一個(gè)無(wú)需編譯Boost,直接使用頭文件的示例:
            ①打開Visual Studio 2008,新建Visual C++工程,基于Win32控制臺(tái)程序,工程名為example,確定之后,在彈出的對(duì)話框中“應(yīng)用程序設(shè)置”打鉤上“控制臺(tái)應(yīng)用程序”和“空項(xiàng)目”,點(diǎn)“完成”;
            ②在“解決方案資源管理器”右擊example工程,選擇“屬性”→“C/C++”→“常規(guī)”→“附加包含目錄”,輸入剛才解壓Boost的目錄,比如“F:/MyCode/BOOST/boost_1_46_1”,如下圖所示:

            ③右擊example工程下的“源文件”→“添加”→“新建項(xiàng)”→左邊的“代碼”→選中右邊的“C++文件(.cpp)”,文件名為example,點(diǎn)“添加”,輸入以下代碼:

            #include <boost/lambda/lambda.hpp> 
            #include <iostream> 
            #include <iterator> 
            #include <algorithm> 
             
            int main() 

                using namespace boost::lambda; 
                typedef std::istream_iterator<int> in; 
             
                std::for_each( 
                    in(std::cin), in(), std::cout << (_1 * 3) << " " ); 

            ④點(diǎn)擊菜單欄上“生成”→“生成解決方案”,正常的話會(huì)編譯通過(guò),按F5可看結(jié)果,結(jié)果如下圖所示:

            這個(gè)example代碼的功能是從標(biāo)準(zhǔn)輸入中讀取一系列整型,然后使用boost::lambda使之每個(gè)數(shù)乘以3,再把結(jié)果寫進(jìn)標(biāo)準(zhǔn)輸出。


            5.若是需要用到那些必須得編譯鏈接的庫(kù),那么就得組建編譯Boost庫(kù)了。官方文檔上介紹說(shuō)可以使用安裝版,或者自己編譯源代碼,特別介紹推薦在Microsoft Visual Studio開發(fā)環(huán)境下使用安裝版,因?yàn)榘惭b版可以直接下載,并且?guī)в蓄A(yù)編譯好的庫(kù),節(jié)省自己編譯源代碼的麻煩。在這里,因?yàn)槲沂褂玫氖荲isual Studio 2008,故欲試試使用安裝版。安裝版是boostpro網(wǎng)站制作的,安裝版不是跟官方的Boost同步的,會(huì)比較晚一些時(shí)間才會(huì)發(fā)布出來(lái)。當(dāng)前最新版BoostPro 1.46.1 Installer (197K .exe),下載地址:http://www.boostpro.com/download/

            5.1運(yùn)行安裝版,一路“I Agree”,注意會(huì)連接網(wǎng)絡(luò),必須放行。之后會(huì)彈出選擇下載Boost C++庫(kù)1.46.1的鏡像地址,默認(rèn)就好,繼續(xù)“Next”,彈出選擇默認(rèn)的編譯類型,在左側(cè)選擇“Visual C++ 9”,在右側(cè)選擇類型,我們一般所用到的運(yùn)行庫(kù)比較多使用多線程,可以在上面的example工程看屬性,如下圖所示:

            為此,我們只需選擇上面四個(gè)選項(xiàng),再根據(jù)動(dòng)態(tài)鏈接和靜態(tài)鏈接需求進(jìn)行選擇,如下圖所示:

            接下去就是選擇組件安裝,沒(méi)啥問(wèn)題就默認(rèn)了,下一步選擇路徑,接著就開始下載了,如下圖所示:

            因?yàn)槭沁B接網(wǎng)絡(luò)下載,所以得一段比較長(zhǎng)的時(shí)間,下載完之后就會(huì)自動(dòng)安裝好,在設(shè)定的目錄下就有個(gè)lib文件夾,里面就是編譯好的庫(kù)。
            5.2現(xiàn)在讓我們測(cè)試一下那些需要鏈接才能使用的庫(kù):
            ①打開上面建立的example工程,將其cpp文件代碼改為如下:

            #include <boost/regex.hpp> 
            #include <iostream> 
            #include <string> 
             
            int main() 

                std::string line; 
                boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" ); 
             
                while (std::cin) 
                { 
                    std::getline(std::cin, line); 
                    boost::smatch matches; 
                    if (boost::regex_match(line, matches, pat)) 
                        std::cout << matches[2] << std::endl; 
                } 

            此時(shí),若是生成解決方案的話,就會(huì)提示 fatal error LNK1104: 無(wú)法打開文件“libboost_regex-vc90-mt-gd-1_46_1.lib”
            ②右鍵example解決方案,選擇“屬性”→“配置屬性”→“鏈接器”→“附加庫(kù)目錄”,添加安裝版下載好的lib庫(kù)文件夾路徑,如下圖所示:

            ③在菜單欄“生成”下拉選擇“生成解決方案”,無(wú)警告無(wú)錯(cuò)誤通過(guò)。將下面文字保存成文本文檔,文件名為jayne.txt,內(nèi)容如下:

            To: George Shmidlap 
            From: Rita Marlowe 
            Subject: Will Success Spoil Rock Hunter? 
            --- 
            See subject. 

            然后保存到工程目錄的Debug文件夾下。接著Win+R輸入CMD進(jìn)入控制臺(tái),cd 轉(zhuǎn)到此Debug目錄下,輸入example < jayne.txt命令,如下圖所示:

            回車之后,文本文檔里面Subject主題的內(nèi)容就會(huì)被正則匹配出來(lái),如下圖所示:

            也可以不進(jìn)入CMD控制臺(tái),直接在example解決方案右鍵“屬性”→“調(diào)試”→“命令參數(shù)”,輸入< jayne.txt ,按“確定”,直接Ctrl+F5運(yùn)行程序,結(jié)果如下圖所示:


            6.最后總結(jié),Visual Studio環(huán)境的話可以直接下載安裝版的,省去麻煩的編譯過(guò)程,但是不帶幫助文檔,這點(diǎn)得自己再?gòu)墓俜骄W(wǎng)站下載了,目前有漢化Boost文檔,還有一些不錯(cuò)的中文站點(diǎn),列舉如下:
            boost文檔漢化:http://code.google.com/p/boost-doc-zh/
            在線漢化版文檔:http://www.cppprog.com/boost_doc/

            posted @ 2012-03-02 21:01 多彩人生 閱讀(1839) | 評(píng)論 (0)編輯 收藏

            補(bǔ)習(xí) size_t

            size_t是標(biāo)準(zhǔn)C庫(kù)中定義的,應(yīng)為unsigned int。
              數(shù)據(jù)類型"socklen_t"和int應(yīng)該具有相同的長(zhǎng)度。否則就會(huì)破壞 BSD套接字層的填充.POSIX開始的時(shí)候用的是size_t, Linus Torvalds(他希望有更多的人,但顯然不是很多) 努力向他們解釋使用size_t是完全錯(cuò)誤的,因?yàn)樵?4位結(jié)構(gòu)中 size_t和int的長(zhǎng)度是不一樣的,而這個(gè)參數(shù)(也就是accept函數(shù)的第三參數(shù))的長(zhǎng)度必須和int一致,因?yàn)檫@是BSD套接字接口標(biāo)準(zhǔn).最終POSIX的那幫家伙找到了解決的辦法,那就是創(chuàng)造了一個(gè)新的類型"socklen_t".Linux Torvalds說(shuō)這是由于他們發(fā)現(xiàn)了自己的錯(cuò)誤但又不好意思向大家伙兒承認(rèn),所以另外創(chuàng)造了一個(gè)新的數(shù)據(jù)類型 。
              在C++中,設(shè)計(jì) size_t 就是為了適應(yīng)多個(gè)平臺(tái)的 。size_t的引入增強(qiáng)了程序在不同平臺(tái)上的可移植性。size_t是針對(duì)系統(tǒng)定制的一種數(shù)據(jù)類型,一般是整型,因?yàn)镃/C++標(biāo)準(zhǔn)只定義一最低的位數(shù),而不是必需的固定位數(shù)。而且在內(nèi)存里,對(duì)數(shù)的高位對(duì)齊存儲(chǔ)還是低位對(duì)齊存儲(chǔ)各系統(tǒng)都不一樣。為了提高代碼的可移植性,就有必要定議這樣的數(shù)據(jù)類型。一般這種類型都會(huì)定義到它具體占幾位內(nèi)存等。當(dāng)然,有些是編譯器或系統(tǒng)已經(jīng)給定義好的。經(jīng)測(cè)試發(fā)現(xiàn),在32位系統(tǒng)中size_t是4字節(jié)的,而在64位系統(tǒng)中,size_t是8字節(jié)的,這樣利用該類型可以增強(qiáng)程序的可移植性。
              一個(gè)基本的無(wú)符號(hào)整數(shù)的C / C + +類型。 它是sizeof操作符返回的結(jié)果類型。 該類型的大小是選擇,因此,它可以存儲(chǔ)在理論上是可能的任何類型的數(shù)組的最大大小。 在32位系統(tǒng)為size_t將采取32位和64位 - 64位。 換句話說(shuō),一個(gè)指針可以被安全地放進(jìn)為size_t類型(一個(gè)例外是類的函數(shù)指針,但是這是一個(gè)特殊的情況下)。 為size_t類型通常用于循環(huán),數(shù)組索引,大小的存儲(chǔ)和地址運(yùn)算。 雖然為size_t可以存儲(chǔ)一個(gè)指針,它是更好地使用另一個(gè)unsinged整數(shù)類型uintptr_t形式,目的(它的名字反映了它的能力)。 在某些情況下,使用為size_t類型是更有效,比使用更無(wú)符號(hào)類型的程序員習(xí)慣性安全。
              size_t是一個(gè)無(wú)符號(hào)整數(shù)memsize基地型的C / C + +語(yǔ)言的標(biāo)準(zhǔn)庫(kù)中定義的。 此類型在C頭文件stddef.h,在文件cstddef中所述的C + +。 位于頭文件stddef.h中定義的類型在全局命名空間,而cstddef地方在命名空間std為size_t類型。 由于C語(yǔ)言的標(biāo)準(zhǔn)頭文件stddef.h納入的兼容性的目的,在這些方案中,您可以在全局命名空間的類型的C + +程序(:為size_t,為size_t)和命名空間std(STD::為size_t)。

            ============================
            主要是為了可移植用的
            typedef unsigned long size_t;
            typedef short pid_t;
            在其他平臺(tái)上有可能是 typedef unsigned int/long long size_t,         typedef long/int pid_t等等,,
            這樣就可以直接用size_t pid_t定義變量了,
            解釋以下pid_t的用法:
            主要用在linux c下進(jìn)程管理中的,用它來(lái)表示進(jìn)程的id類型,即表示進(jìn)程表的索引(進(jìn)程表里是進(jìn)程id類型)

            posted @ 2012-03-01 20:38 多彩人生 閱讀(500) | 評(píng)論 (0)編輯 收藏

            Lua closure upvalue (轉(zhuǎn))

            function是和數(shù)值、字符串同等地位的基本類型!

              Lua中的函數(shù)是一階類型值(first-class value),定義函數(shù)就象創(chuàng)建普通類型值一樣(只不過(guò)函數(shù)類型值的數(shù)據(jù)主要是一條條指令而已),所以在函數(shù)體中仍然可以定義函數(shù)。假設(shè)函數(shù)f2定義在函數(shù)f1中,那么就稱f2為f1的內(nèi)嵌(inner)函數(shù),f1為f2的外包 (enclosing)函數(shù),外包和內(nèi)嵌都具有傳遞性,即f2的內(nèi)嵌必然是f1的內(nèi)嵌,而f1的外包也一定是f2的外包。內(nèi)嵌函數(shù)可以訪問(wèn)外包函數(shù)已經(jīng)創(chuàng)建的所有局部變量,這種特性便是所謂的詞法定界(lexical scoping),而這些局部變量則稱為該內(nèi)嵌函數(shù)的外部局部變量(external  local variable)或者upvalue(這個(gè)詞多少會(huì)讓人產(chǎn)生誤解,因?yàn)閡pvalue實(shí)際指的是變量而不是值)。試看如下代碼:

              function f1(n)
              -- 函數(shù)參數(shù)也是局部變量
              
              local function f2()
              print(n) -- 引用外包函數(shù)的局部變量
              end
              return f2
              end
              
              g1 = f1(1979)
              g1() -- 打印出1979
              g2 = f1(500)
              g2() -- 打印出500
              
              當(dāng)執(zhí)行完g1 = f1(1979)后,局部變量n的生命本該結(jié)束,但因?yàn)樗呀?jīng)成了內(nèi)嵌函數(shù)f2(它又被賦給了變量g1)的upvalue,所以它仍然能以某種形式繼續(xù)“存活”下來(lái),從而令g1()打印出正確的值。
              
              可為什么g2與g1的函數(shù)體一樣(都是f1的內(nèi)嵌函數(shù)f2的函數(shù)體),但打印值不同?這就涉及到一個(gè)相當(dāng)重要的概念——閉包(closure)。事實(shí)上,Lua編譯一個(gè)函數(shù)時(shí),會(huì)為它生成一個(gè)原型(prototype),其中包含了函數(shù)體對(duì)應(yīng)的虛擬機(jī)指令、函數(shù)用到的常量值(數(shù),文本字符串等等)和一些調(diào)試信息。在運(yùn)行時(shí),每當(dāng)Lua執(zhí)行一個(gè)形如function...end 這樣的表達(dá)式時(shí),它就會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象,其中包含了相應(yīng)函數(shù)原型的引用、環(huán)境(environment,用來(lái)查找全局變量的表)的引用以及一個(gè)由所有upvalue引用組成的數(shù)組,而這個(gè)數(shù)據(jù)對(duì)象就稱為閉包。由此可見(jiàn),函數(shù)是編譯期概念,是靜態(tài)的,而閉包是運(yùn)行期概念,是動(dòng)態(tài)的。g1和g2的值嚴(yán)格來(lái)說(shuō)不是函數(shù)而是閉包,并且是兩個(gè)不相同的閉包,而每個(gè)閉包可以保有自己的 upvalue值,所以g1和g2打印出的結(jié)果當(dāng)然就不一樣了。雖然閉包和函數(shù)是本質(zhì)不同的概念,但為了方便,且在不引起混淆的情況下,我們對(duì)它們不做區(qū)分。
              
              使用upvalue很方便,但它們的語(yǔ)義也很微妙,需要引起注意。比如將f1函數(shù)改成:
              
              function f1(n)
              local function f2()
              print(n)
              end
              n = n + 10
              return f2
              end
              
              g1 = f1(1979)
              g1() -- 打印出1989
              
              內(nèi)嵌函數(shù)定義在n = n + 10這條語(yǔ)句之前,可為什么g1()打印出的卻是1989?upvalue實(shí)際是局部變量,而局部變量是保存在函數(shù)堆棧框架上(stack frame)的,所以只要upvalue還沒(méi)有離開自己的作用域,它就一直生存在函數(shù)堆棧上。這種情況下,閉包將通過(guò)指向堆棧上的 upvalue的引用來(lái)訪問(wèn)它們,一旦upvalue即將離開自己的作用域(這也意味著它馬上要從堆棧中消失),閉包就會(huì)為它分配空間并保存當(dāng)前的值,以后便可通過(guò)指向新分配空間的引用來(lái)訪問(wèn)該upvalue。當(dāng)執(zhí)行到f1(1979)的n = n + 10時(shí),閉包已經(jīng)創(chuàng)建了,但是n并沒(méi)有離開作用域,所以閉包仍然引用堆棧上的n,當(dāng)return f2完成時(shí),n即將結(jié)束生命,此時(shí)閉包便將n(已經(jīng)是1989了)復(fù)制到自己管理的空間中以便將來(lái)訪問(wèn)。弄清楚了內(nèi)部的秘密后,運(yùn)行結(jié)果就不難解釋了。
              
              upvalue還可以為閉包之間提供一種數(shù)據(jù)共享的機(jī)制。試看下例:
              
              function Create(n)
              local function foo1()
              print(n)
              end
              
              local function foo2()
              n = n + 10
              end
              
              return foo1,foo2
              end
              
              f1,f2 = Create(1979)
              f1() -- 打印1979
              f2()
              f1() -- 打印1989
              f2()
              f1() -- 打印1999
              
              f1,f2這兩個(gè)閉包的原型分別是Create中的內(nèi)嵌函數(shù)foo1和foo2,而foo1和foo2引用的upvalue是同一個(gè),即Create的局部變量n。前面已說(shuō)過(guò),執(zhí)行完Create調(diào)用后,閉包會(huì)把堆棧上n的值復(fù)制出來(lái),那么是否f1和f2就分別擁有一個(gè)n的拷貝呢?其實(shí)不然,當(dāng)Lua發(fā)現(xiàn)兩個(gè)閉包的upvalue指向的是當(dāng)前堆棧上的相同變量時(shí),會(huì)聰明地只生成一個(gè)拷貝,然后讓這兩個(gè)閉包共享該拷貝,這樣任一個(gè)閉包對(duì)該upvalue進(jìn)行修改都會(huì)被另一個(gè)探知。上述例子很清楚地說(shuō)明了這點(diǎn):每次調(diào)用f2都將upvalue的值增加了10,隨后f1將更新后的值打印出來(lái)。upvalue的這種語(yǔ)義很有價(jià)值,它使得閉包之間可以不依賴全局變量進(jìn)行通訊,從而使代碼的可靠性大大提高。
              
              閉包在創(chuàng)建之時(shí)其upvalue就已經(jīng)不在堆棧上的情況也有可能發(fā)生,這是因?yàn)閮?nèi)嵌函數(shù)可以引用更外層外包函數(shù)的局部變量:
              
              function Test(n)
              local function foo()
              local function inner1()
              print(n)
              end
              local function inner2()
              n = n + 10
              end
              return inner1,inner2
              end
              return foo
              end
              
              t = Test(1979)
              f1,f2 = t()
              f1()        -- 打印1979
              f2()
              f1()        -- 打印1989
              g1,g2 = t()
              g1()        -- 打印1989
              g2()
              g1()        -- 打印1999
              f1()        -- 打印1999
              
              執(zhí)行完t = Test(1979)后,Test的局部變量n就“死”了,所以當(dāng)f1,f2這兩個(gè)閉包被創(chuàng)建時(shí)堆棧上根本找不到n的蹤影,這叫它們?nèi)绾稳〉胣的值呢?呵呵,不要忘了Test函數(shù)的n不僅僅是inner1和inner2的upvalue,同時(shí)它也是foo的upvalue。t =  Test(1979)之后,t這個(gè)閉包一定已經(jīng)把n妥善保存好了,之后f1、f2如果在當(dāng)前堆棧上找不到n就會(huì)自動(dòng)到它們的外包閉包(姑且這么叫)的 upvalue引用數(shù)組中去找,并把找到的引用值拷貝到自己的upvalue引用數(shù)組中。仔細(xì)觀察上述代碼,可以判定g1和g2與f1和f2共享同一個(gè) upvalue。這是為什么呢?其實(shí),g1和g2與f1和f2都是同一個(gè)閉包(t)創(chuàng)建的,所以它們引用的upvalue(n)實(shí)際也是同一個(gè)變量,而剛才描述的搜索機(jī)制則保證了最后它們的upvalue引用都會(huì)指向同一個(gè)地方。
              
              Lua將函數(shù)做為基本類型值并支持詞法定界的特性使得語(yǔ)言具有強(qiáng)大的抽象能力。而透徹認(rèn)識(shí)函數(shù)、閉包和upvalue將幫助程序員善用這種能力。

            posted @ 2012-02-28 20:13 多彩人生 閱讀(2022) | 評(píng)論 (0)編輯 收藏

            Lua語(yǔ)言-安裝,編輯,編譯,運(yùn)行指導(dǎo)

            既然開始學(xué)習(xí)Lua,就應(yīng)該對(duì)它有個(gè)一個(gè)大體的了解,對(duì)于Lua語(yǔ)言的介紹可以看這里
            http://baike.baidu.com/view/416116.htm【百度百科】
            英文好的朋友也可以直接到Lua官方[url=javascript:;]網(wǎng)站[/url]去了解更多的內(nèi)容
            http://www.lua.org【Lua官方網(wǎng)站】
            這次主要介紹一下學(xué)習(xí)Lua之前的準(zhǔn)備工作。
            (1) 下載Lua壓縮包,下載頁(yè)面是http://www.lua.org/download.html 最新版本是lua-5.1.2
            也可以點(diǎn)擊這里直接下載:http://www.lua.org/ftp/lua-5.1.2.tar.gz 它的體積很小,只有210K
            (2)解壓文件,比如解壓到 D:/lua-5.1.2 文件夾內(nèi)(以下均以此路徑為例)。
            (3)在 D:/lua-5.1.2 內(nèi),存在名為 /etc 的子目錄。在此目錄下找到 luavs.bat 文件,并將它復(fù)制到 D:/lua-5.1.2 中。
            (4)雙擊執(zhí)行 luavs.bat 批處理文件,如果執(zhí)行成功,在 D:/lua-5.1.2/src 文件夾中會(huì)存在 luac.exe lua.exe兩個(gè)文件。
            (5)將 D:/lua-5.1.2/src 加入到系統(tǒng)路徑中。
            (6)檢測(cè)Lua是否安裝成功:
            在"開始"--"運(yùn)行"處輸入 lua 然后回車,若出現(xiàn)cmd控制臺(tái)界面且含有"[backcolor=rgb(255,]Lua 5.1.2"之類的文字,則說(shuō)明Lua已經(jīng)成功安裝。如果提示沒(méi)有找到該命令,請(qǐng)檢查D:/lua-5.1.2/src 文件夾中是否存在 luac.exe lua.exe 兩個(gè)文件,并確保已將 D:/lua-5.1.2/src 加入到系統(tǒng)路徑中。
            (7)打造一個(gè)簡(jiǎn)單的Lua編輯器:
            這里我使用EditPlus 最新版本的下載頁(yè)面:http://www.onlinedown.net/soft/7116.htm 【華軍軟件園】
            根據(jù)個(gè)人習(xí)慣可以選擇漢化版本或者英文原版,這里我以英文原版進(jìn)行說(shuō)明。
            安裝上EditPlus第一次運(yùn)行時(shí),需要輸入注冊(cè)碼或試用30天。在網(wǎng)上搜得注冊(cè)碼如下:
            Namewww.cnzz.cc
            Code60A8E-21F10-5BZ83-ADW4E-F3TC9

            我使用的版本是 EditPlus 2.31 Build 524,以上注冊(cè)碼可以使用。
            注冊(cè)成功后,打開 EditPlus,選擇Tools -- Preferences ,選擇setting & syntax,點(diǎn)擊右面的Add 按鈕增加一個(gè)文件類型,在下面的Descrīption欄里填寫Lua,[backcolor=rgb(255,]FIle extension欄里填寫lua。注意到下面還有一欄可以選擇Syntax File,這是提供Lua語(yǔ)法文件的地方。有了它,可以讓EditPlus支持lua代碼的高亮關(guān)鍵字顯示。這個(gè)高亮支持代碼可以在網(wǎng)上搜到,做成后綴名為[backcolor=rgb(255,]stx的文件就可以了。
            我已經(jīng)將lua.stx文件上傳到csdn資源,下載地址http://download.csdn.net/source/257667【CSDN資源】
            再選擇左面的User tools選項(xiàng),點(diǎn)擊右面的Add Tool -- Program
            之后,在Menu Text一欄中填入 Run_Lua
            Command一欄中填入 lua
            Argument一欄中填入$(FileName)
            Initial directory一欄中填入$(FileDir)
            更改所有設(shè)置之后,不要忘記點(diǎn)擊[backcolor=rgb(255,]Apply應(yīng)用,然后點(diǎn)擊OK
            選擇File -- New -- Others... ,然后選擇我們剛剛新創(chuàng)建的Lua文件,寫入一行代碼如下:
            print("Hello,Lua")
            然后保存一下。選擇Tools菜單,最下面有自定義命令Run_Lua,點(diǎn)擊此命令即可完成lua文件的執(zhí)行(或者用快捷鍵 Ctrl + 1)。執(zhí)行結(jié)果是彈出一個(gè)寫有Hello,Lua的控制臺(tái)。
            至此,學(xué)習(xí)Lua的準(zhǔn)備工作完畢,可以正式開始學(xué)習(xí)了。

            posted @ 2012-02-16 22:52 多彩人生 閱讀(4973) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共25頁(yè): First 17 18 19 20 21 22 23 24 25 

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久亚洲国产成人影院网站| 无码国内精品久久人妻麻豆按摩| 91久久精品国产91性色也| 中文字幕人妻色偷偷久久| 久久99精品久久久大学生| 久久一本综合| 国产免费久久精品99久久| 四虎影视久久久免费观看| 久久er国产精品免费观看8| 亚洲国产精品综合久久一线| 18禁黄久久久AAA片| 老色鬼久久亚洲AV综合| 久久被窝电影亚洲爽爽爽| 久久久99精品成人片中文字幕| 亚洲日韩欧美一区久久久久我| 久久天天日天天操综合伊人av| 久久亚洲2019中文字幕| 久久久国产视频| 精品一区二区久久久久久久网站| 久久国产精品久久国产精品| 婷婷综合久久中文字幕| 性做久久久久久久久| AV无码久久久久不卡蜜桃| 久久精品中文字幕无码绿巨人| 国产亚州精品女人久久久久久 | 91精品国产综合久久香蕉 | 久久亚洲AV成人出白浆无码国产| 2020国产成人久久精品| 国产精品99久久久精品无码| 狠狠88综合久久久久综合网| 77777亚洲午夜久久多喷| 一本色道久久88综合日韩精品| 狠狠色婷婷久久综合频道日韩 | 国产情侣久久久久aⅴ免费| 秋霞久久国产精品电影院| 亚洲∧v久久久无码精品| 亚洲七七久久精品中文国产 | 99久久精品国产免看国产一区| 久久久综合香蕉尹人综合网| 久久久久久九九99精品| 亚洲乱码日产精品a级毛片久久|