• <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>

            《c++primer》學習隨筆——引用

                 摘要: 通過一個例子簡單介紹了引用的基本概念和用法  閱讀全文

            posted @ 2011-06-15 19:19 古月 閱讀(213) | 評論 (0)編輯 收藏

            《c++primer》學習隨筆——定義、聲明和extern

            1,聲明一個變量,必須加關鍵字extern
            2,沒有關鍵字extern,則就為變量的定義,無論這個變量定義時有沒有初始化
            3,只要定義變量時初始化了,即使前面加了關鍵字extern,也是定義,不是聲明。(不過只有在函數體外時,才能夠在定義且初始化時,加上extern關鍵字,這是為了const變量設定的)
            4,多文件程序中,一個文件含有變量的定義,另外一個文件中含有變量的聲明,定義只能有一次,聲明不限。
            5,非const變量,定義時默認是加了extern的,即在函數體外定義變量時,默認加了extern,說明這是一個全局變量,可以被其他文件訪問(訪問的前提是在這個文件中做了聲明)。
               但是const變量,默認是不加extern的,也就是即使在函數體外全局作用域定義一個const變量,也只能夠在定義的這個文件訪問,不能被其他文件訪問。要想被其他文件訪問,需要在定義const變量時,顯示的加上extern關鍵詞。 

                
                extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件(當然也有可能定義就在本文件中)中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。



            posted @ 2011-06-15 18:27 古月 閱讀(280) | 評論 (0)編輯 收藏

            關于main()函數(轉)

            首先聲明,非本人原創,轉自http://tieba.baidu.com/f?kz=259374701,寫的非常好,謝謝原作者了。main()函數稱之為主函數,一個C程序總是從main()函數開始執行的。

            一、main()函數的形式
            在最新的 C99 標準中,只有以下兩種定義方式是正確的:

            int main( void )--無參數形式
            {
            ...
            return 0;
            }

            int main( int argc, char *argv[] )--帶參數形式
            {
            ...
            return 0;
            }

            int指明了main()函數的返回類型,函數名后面的圓括號一般包含傳遞給函數的信息。void表示沒有給函數傳遞參數。關于帶參數的形式,我們等會討論。

            瀏覽老版本的C代碼,將會發現程序常常以

            main()

            這種形式開始。C90標準允許這種形式,但是C99標準不允許。因此即使你當前的編譯器允許,也不要這么寫。

            你還可能看到過另一種形式:

            void main()

            有些編譯器允許這種形式,但是還沒有任何標準考慮接受它。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地表示:void main( ) 的定義從來就不存在于 C++ 或者 C 。所以,編譯器不必接受這種形式,并且很多編譯器也不允許這么寫。

            堅持使用標準的意義在于:當你把程序從一個編譯器移到另一個編譯器時,照樣能正常運行。


            二、main()函數的返回值

            從前面我們知道main()函數的返回值類型是int型的,而程序最后的 return 0; 正與之遙相呼應,0就是main()函數的返回值。那么這個0返回到那里呢?返回給操作系統,表示程序正常退出。因為return語句通常寫在程序的最后,不管返回什么值,只要到達這一步,說明程序已經運行完畢。而return的作用不僅在于返回一個值,還在于結束函數。
            現在我們來做一個小試驗(注意:本人的系統是Windows XP, 編譯環境是TC)來觀察main()函數的返回值。編寫如下代碼并編譯運行:

            //a.c
            #include "stdio.h"
            int main(void)
            {
            printf("I love you.");

            return 0;
            }

            將這個文件保存為a.c,編譯運行后會生成一個a.exe文件。現在打開命令提示符,在命令行里運行剛才編譯好的可執行文件,然后輸入 echo %ERRORLEVEL% ,回車,就可以看到程序返回 一個0 。如果把 return 0; 改為 return 99; ,那么很顯然,再次執行上述步驟以后你可以看到程序返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給操作系統之前,被強制類型轉換成整數類型了。
            現在,我們把a.c改回原來的代碼,然后再編寫另一個程序b.c:

            //b.c
            #include "stdio.h"
            int main(void)
            {
            printf("\nI'm too.");

            return 0;
            }

            編譯運行后打開命令提示符,在命令行里輸入a&&b 回車,這樣你就可以看到《人鬼情未了》里面經典的愛情對白:

            I love you.
            I'm too.

            && 的含義是:如果 && 前面的程序正常退出,則繼續執行 && 后面的程序,否則不執行。所以,要是把a.c里面的 return 0; 刪除或者改為 return 99; ,那么你只能看到 I love you. 。也就是說,程序b.c就不執行了。現在,大家該明白 return 0; 的作用了吧。


            三、main()函數的參數

            C編譯器允許main()函數沒有參數,或者有兩個參數(有些實現允許更多的參數,但這只是對標準的擴展)。這兩個參數,一個是int類型,一個是字符串類型。第一個參數是命令行中的字符串數。按照慣例(但不是必須的),這個int參數被稱為argc(argument count)。大家或許現在才明白這個形參為什么要取這么個奇怪的名字吧,呵呵!至于英文的意思,自己查字典吧。第二個參數是一個指向字符串的指針數組。命令行中的每個字符串被存儲到內存中,并且分配一個指針指向它。按照慣例,這個指針數組被稱為argv(argument value)。系統使用空格把各個字符串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最后的第一個字符串賦給argv[1],等等。
             現在我們來看一個例子:

            //c.c
            #include "stdio.h"
            int main(int argc, char *argv[])
            {
            int count;

            printf("The command line has %d arguments: \n",argc-1);
            for(count=1;count<argc;count++)
            printf("%d: %s\n",count,argv[count]);

            return 0;
            }
            編譯運行,在命令行輸入c I love you 回車,下面是從命令行運行該程序的結果:

            The command line has 3 arguments:
            1:I
            2:love
            3:you

            從本例可以看出,程序從命令行中接受到4個字符串(包括程序名),并將它們存放在字符串數組中,其對應關系:
            argv[0] ------> c(程序名)
            argv[1] ------> I
            argv[2] ------> love
            argv[3] ------> you
            至于argc的值,也即是參數的個數,程序在運行時會自動統計,不必我們操心。
            這個例子中,每個字符串都時一個單詞(字母),那既然是字符串,要把一句話當作參數賦給程序該怎么辦?你可以在命令行里這樣輸入 c "I love you." "I'm too."。程序運行結果:

            The command line has 2 arguments:
            1:I love you.
            2:I'm too.

            其對應關系:
            argv[0] ------> c(程序名)
            argv[1] ------> I love you.
            argv[2] ------> I'm too.

            要注意的是,你在命令行的輸入都將作為字符串形式存儲于內存中。也就是說,如果你輸入一個數字,那么要輸出這個數字,你應該用%s格式而非%d或者其他。
            再來看一個例子:
            //d.c
            #include "stdio.h"
            int main(int argc, char *argv[])
            {
            FILE *fp;

            fp=fopen(argv[1],"w");
            fputs("I love you.",fp);
            fclose(fp);

            return 0;
            }
            編譯運行,打開命令行并輸入d love.txt 回車。這樣,打開d.c文件所在的目錄,你會發現多了一個名為 love.txt 的文件,打開后里面的內容正是世界上說的最多的那句話。
            當然,你可能會說我不需要使用命令行參數就可以做到這些。是的,你當然可以。使用命令行參數的理由或許就是練習命令行用法,以備以后需要編寫基于命令行的程序。還有一個好處是,不需要C環境就可以運行已經編譯好的程序。比如,你把上面那個程序編譯后生成的d.exe發給你的女朋友,再告訴她怎么運行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。

            posted @ 2011-05-31 23:42 古月 閱讀(245) | 評論 (0)編輯 收藏

            C語言之Main函數返回值問題分析(非本人原創,轉自百度文庫)

             

            C語言之Main函數返回值問題分析: 很多人甚至市面上的一些書籍,都使用了void main( ) ,其實這是錯誤的。C/C++ 中從來沒有定義過void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地寫著 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 從來就不存在于 C++ 或者 C )。下面我分別說一下 C 和 C++ 標準中對 main 函數的定義。
              “The C programming Language(《C 程序設計語言》)用的就是 main( )。”--- 這是因為第一版的C語言只有一種類型,那就是int,沒有char,沒有long,沒有float,…………既然只有一種類型,那么就可以不寫,后來的改進版為了兼容以前的代碼于是規定:不明確標明返回值的,默認返回值為int,也就是說 main()等同于int main(),而不是等同于void main()。在C99中,標準要求編譯器至少給 main() 這種用法來個警告。
            1. C
              在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的經典巨著 The C programming Language 2e(《C 程序設計語言第二版》)用的就是 main( )。不過在最新的 C99 標準中,只有以下兩種定義方式是正確的:
            int main( void )
            int main( int argc, char *argv[] )
            (參考資料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)
              當然,我們也可以做一點小小的改動。例如:char *argv[] 可以寫成 char **argv;argv 和 argc 可以改成別的變量名(如 intval 和 charval),不過一定要符合變量的命名規則。
              如果不需要從命令行中獲取參數,請用int main(void) ;否則請用int main( int argc, char *argv[] ) 。
            main 函數的返回值類型必須是 int ,這樣返回值才能傳遞給程序的激活者(如操作系統)。
              如果 main 函數的最后沒有寫 return 語句的話,C99 規定編譯器要自動在生成的目標文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不過,我還是建議你最好在main函數的最后加上return 語句,雖然沒有這個必要,但這是一個好的習慣。注意,vc6不會在目標文件中加入return 0; ,大概是因為 vc6 是 98 年的產品,所以才不支持這個特性。現在明白我為什么建議你最好加上 return 語句了吧!不過,gcc3.2(Linux 下的 C 編譯器)會在生成的目標文件中加入 return 0; 。
            2. C++
              C++98 中定義了如下兩種 main 函數的定義方式: [Page]
            int main( )
            int main( int argc, char *argv[] )
            (參考資料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)
              int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定義的一樣。同樣,main 函數的返回值類型也必須是int。如果main函數的末尾沒寫return語句,C++98 規定編譯器要自動在生成的目標文件中加入 return 0; 。同樣,vc6 也不支持這個特性,但是 g++3.2(Linux 下的 C++ 編譯器)支持。
            3. 關于 void main
              在 C 和 C++ 中,不接收任何參數也不返回任何信息的函數原型為“void foo(void);”。可能正是因為這個,所以很多人都誤認為如果不需要程序返回值時可以把main函數定義成void main(void) 。然而這是錯誤的!main 函數的返回值應該定義為 int 類型,C 和 C++ 標準中都是這樣規定的。雖然在一些編譯器中,void main 可以通過編譯(如 vc6),但并非所有編譯器都支持 void main ,因為標準中從來沒有定義過 void main 。g++3.2 中如果 main 函數的返回值不是 int 類型,就根本通不過編譯。而 gcc3.2 則會發出警告。所以,如果你想你的程序擁有很好的可移植性,請一定要用 int main 。
              總而言之:
            void main 主函數沒有返回值
            main 默認為int 型,即 int main(),返回整數。
            注意,新標準不允許使用默認返回值,即int不能省,而且對應main函數不再支持void型返回值,因此為了使程序有很好的移植性,強烈建議使用:
            int main()
            {
            return 0; /* 新標準主函數的返回值這條語句可以省略 */
            }

            posted @ 2011-05-31 20:20 古月 閱讀(412) | 評論 (0)編輯 收藏

            僅列出標題
            共3頁: 1 2 3 
            <2014年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            C++/C

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久WWW成人免费精品| 久久精品蜜芽亚洲国产AV| 日本三级久久网| 久久久久亚洲av成人无码电影| 精品久久久久久久久久中文字幕| 久久99精品久久久久久不卡| 日韩亚洲国产综合久久久| 伊人久久大香线蕉亚洲五月天| 久久久久久午夜成人影院| 国产午夜精品理论片久久| 久久无码高潮喷水| 成人国内精品久久久久影院VR| 亚洲欧洲精品成人久久曰影片| 亚洲αv久久久噜噜噜噜噜| 精品久久久久久亚洲| 2020久久精品亚洲热综合一本| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久久国产精华液| 91超碰碰碰碰久久久久久综合| 久久伊人精品一区二区三区| 国产精品成人精品久久久| 亚洲国产精品无码久久久不卡| 成人亚洲欧美久久久久 | 伊人久久大香线蕉综合网站| 久久天天躁狠狠躁夜夜96流白浆| 久久亚洲中文字幕精品一区| 国产亚洲美女精品久久久久狼| 狠狠色丁香久久婷婷综合图片| 色综合久久天天综合| 国产成人精品免费久久久久| 99久久国产精品免费一区二区| 亚洲精品乱码久久久久久不卡| 国产精品一区二区久久精品无码| 国产综合久久久久| 97久久超碰国产精品2021| 亚洲AV成人无码久久精品老人| 久久中文字幕精品| 久久久噜噜噜久久中文字幕色伊伊| 欧美一级久久久久久久大片| 色天使久久综合网天天| 久久久久久久国产免费看|