Time of Update: 2017-02-27
基本解釋本節主要探討C編譯器下面兩方面的特點所引發的一系列常見的編程問題。對C檔案進行分別編譯:C程式通常由幾個小程式(.c檔案)組成,編譯器將這幾個小程式分別編譯,然後通過連結程式將它們組合在一起形成一個目標代碼。由於編譯器每次只能編譯一個檔案,因此它不能立即檢查需要幾個源檔案配合才能發現的錯誤。對函數的參數和傳回值建立臨時變數
Time of Update: 2017-02-27
C語言並不是一種很方便的語言,它的字串就是一例。按照C語言的定義,“字串就是一段記憶體空間,裡麵包含ASCII字元,並且,以“\0”結尾,總共能存放n-1個字元。”按照這個描述,字串處理確實很麻煩,還很容易出錯。為了方便使用者,C語言標準庫向使用者提供了一些字串函數,如字串拷貝、構造、清空等函數,在一定程度上方便了使用者的使用。但是,我無意中發現,這些函數還是有些隱患的。事情很簡單,我注意到我寫的一些程式,老是有記憶體讀寫錯誤,但是,經過仔細檢查我
Time of Update: 2017-02-27
最近項目中要處理文本,因此就用了gun的Regex,它是posix風格的..我們一般使用的都是perl風格的,所以一開始使用可能會有一些不習慣.詳細的區別可以在wiki上看到:http://en.wikipedia.org/wiki/Regular_expression標頭檔是regex.h可以在裡面看到他所提供的介面.這裡主要是3個函數和一個結構體:引用int regcomp (regex_t *compiled, const char *pattern, int cflags) int
Time of Update: 2017-02-27
Chuck Allison 是鹽湖城聖 Latter Day 教堂總部下耶穌教堂家族曆史研究處的軟體體系設計師。他擁有數學學士和數學碩士學位。他從1975年起開始編程,從1984年起他開始從事c語言的教學和開發。他目前的興趣是物件導向的技術及其教育。他是X3J16,ANSI C ++標準化委員會的一員。大部分的作業系統有辦法得到當前的日期和時間。通過定義在time.h的庫函數,ANSI
Time of Update: 2017-02-27
概述Joel Spolsky認為,對指標的理解是一種aptitude,不是通過訓練就可以達到的。雖然如此,我還是想談一談這個C/C++語言中最強勁也是最容易出錯的要素。鑒於指標和目前電腦記憶體結構的關聯,很多C語言比較本質的特點都孕育在其中,因此,本篇和第六、第七兩篇我都將以指標為主線,結合在實際編程中遇到的問題,來詳細談談關於指標的幾個重要方面。指標類型的本質分析1、指標的本質指標的本質:一種複合的資料類型。下面我將以下面幾個作為例子進行展開分析:a)、int *p;b)、int **p;c)
Time of Update: 2017-02-27
基本解釋1、指標的本質是一個與地址相關的複合類型,它的值是資料存放的位置(地址);數組的本質則是一系列的變數。2、數組名對應著(而不是指向)一塊記憶體,其地址與容量在生命期內保持不變,只有數組的內容可以改變。指標可以隨時指向任意類型的記憶體塊,它的特徵是“可變”,所以我們常用指標來操作動態記憶體。3、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指標。問題:指標與數組聽說char a[]與char
Time of Update: 2017-02-27
概述在很多情況下,尤其是讀別人所寫代碼的時候,對C語言聲明的理解能力變得非常重要,而C語言本身的凝練簡約也使得C語言的聲明常常會令人感到非常困惑,因此,在這裡我用一篇的內容來集中闡述一下這個問題。問題:聲明與函數有一段程式儲存在起始地址為0的一段記憶體上,如果我們想要調用這段程式,請問該如何去做?答案答案是(*(void (*)( ) )0)( )。看起來確實令人頭大,那好,讓我們知難而上,從兩個不同的途徑來詳細分析這個問題。答案分析:從尾到頭首先,最基本的函式宣告:void function
Time of Update: 2017-02-27
問題:記憶體使用量有人寫了一個將整數轉換為字串的函數:char *itoa (int n){ char retbuf[20]; sprintf(retbuf, "%d", n); return retbuf;} 如果我調用這個函數:char *str5 = itoa(5),str5會是什麼結果呢?答案分析:答案是不確定,可以確定的是肯定不是我們想要的
Time of Update: 2017-02-27
概述C語言中有一種長度不確定的參數,形如:"…",它主要用在參數個數不確定的函數中,我們最容易想到的例子是printf函數。原型:int printf( const char *format [, argument]... );使用例:printf("Enjoy yourself everyday!\n");printf("The value is %d!\n",
Time of Update: 2017-02-27
概述PC-Lint是一個曆史悠久,功能異常強勁的靜態代碼偵查工具。它的使用曆史可以追溯到電腦編程的遠古時代(30多年以前)。經過這麼多年的發展,它不但能夠監測出許多文法邏輯上的隱患,而且也能夠有效地幫你提出許多程式在空間利用、運行效率上的改進點,在很多專業級的軟體公司,比如Microsoft,
Time of Update: 2017-02-27
概述C語言的記憶體模型基本上對應了現在von Neumann(馮·諾伊曼)電腦的實際儲存模型,很好的達到了對機器的映射,這是C/C++適合做底層開發的主要原因,另外,C語言適合做底層開發還有另外一個原因,那就是C語言對底層操作做了很多的的支援,提供了很多比較底層的功能。下面結合問題分別進行闡述。問題:移位操作在運用移位操作符時,有兩個問題必須要清楚:(1)、在右移操作中,騰空位是填 0 還是符號位;(2)、什麼數可以作移位的位元。答案與分析:">>"
Time of Update: 2017-02-27
再談main()主函數每一C 程式都必須有一main()函數,可以根據自己的愛好把它放在程式的某個地方。有些程式員把它放在最前面,而另一些程式員把它放在最後面,無論放在哪個地方,以下幾點說明都是適合的。1. main() 參數在Turbo C2.0啟動過程中,傳遞main()函數三個參數:argc,argv和env。* argc: 整數,為傳給main()的命令列參數個數。* argv: 字串數組。在DOS 3.X 版本中,argv[0] 為程式啟動並執行全路徑名;對DOS 3.0 以下的版本,
Time of Update: 2017-02-27
問題的提出:我們在編製程式時,經常要用到清屏處理,如dos下的cls,Turbo
Time of Update: 2017-02-27
不同於一般形式的軟體編程,嵌入式系統編程建立在特定的硬體平台上,勢必要求其程式設計語言具備較強的硬體直接操作能力。無疑,組合語言具備這樣的特質。但是,歸因於組合語言開發過程的複雜性,它並不是嵌入式系統開發的一般選擇。而與之相比,C語言--一種"進階的低級"語言,則成為嵌入式系統開發的最佳選擇。筆者在嵌入式系統項目的開發過程中,一次又一次感受到C語言的精妙,沉醉於C語言給嵌入式開發帶來的便利。圖1給出了本文的討論所基於的硬體平台,實際上,這也是大多數嵌入式系統的硬體平台。它包括
Time of Update: 2017-02-27
absread()讀磁碟絕對扇區函數原形:int absread(int drive,int num,int sectnum,void *buf)功能:從drive指定的磁碟機磁碟上,sectnum指定的邏輯扇區號開始讀取(通過DOS中斷0x25讀取)num個(最多64K個)扇區的內容,儲存於buf所指的緩衝區中。參數:drive=0對應A盤,drive=1對應B盤。傳回值:0:成功;-1:失敗。標頭檔:dos.habswrite()寫磁碟絕對扇區函數原形:int abswrite(int
Time of Update: 2017-02-27
一、系統內容Linux 作業系統 kernel2.4.2,安裝 gsoap2.6 到目錄/usr/local/gsoap二、gSOAP 的簡要使用例子下面是一個簡單的例子,實現一個加法運算的 WebService,具體功能是用戶端(client)輸入 num1 和 num2,伺服器端(server)返回 num1 和 num2 相加的結果 sum。1、首先,我們需要做的是寫一個函式宣告檔案,來定義介面函數 ns__add,檔案名稱字為 add.h,內容如下://gsoap ns service
Time of Update: 2017-02-27
很多人學C語言很長一段時間了,還不知C究竟能幹什麼,以為學習c語言沒什麼用,純粹是為了應付學校的考試.更有人說"學C語言?別做如此愚蠢的行為了!趕快學C++吧!"這種看法是不對的,不應該把c跟c++之間划起絕對的界限,過分看重c++而把c貶得一無是處,這是很片面的.C++功能雖然強大,但它畢竟是c的"超集",在c++裡有哪一處找不到c的影子呢?沒有c的支援,c++只能是無本之木。一般情況下,c++編程方式編寫的程式原始碼量小,但編譯後的代碼量較大,啟動並執
Time of Update: 2017-02-27
Windows 服務被設計用於需要在後台啟動並執行應用程式以及實現沒有使用者互動的任務。為了學習這種控制台應用程式的基礎知識,C(不是C++)是最佳選擇。本文將建立並實現一個簡單的服務程式,其功能是查詢系統中可用實體記憶體數量,然後將結果寫入一個文字檔。最後,你可以用所學知識編寫自己的 Windows 服務。當初我寫第一個NT 服務時,我到 MSDN 上找例子。在那裡我找到了一篇 Nigel Thompson 寫的文章:“Creating a Simple Win32
Time of Update: 2017-02-27
(本文的許多命令或方法同樣適用於TC3)在開始看本文以前,我先說明一下C語言的安裝和使用中最應該注意的地方:許多網友在下載Turbo C 2.0和Turbo C++ 3.0後,向我問得最多的是在使用過程中碰到如下問題:1)出現找不到 stdio.h
Time of Update: 2017-02-27
排序是程式設計中非常重要的內容,它的功能是將一組無序的的資料,排列成有序的資料序列,經過排列後的資料,要麼是從大到小排列,要麼是從小到大排列。一般也只有這兩種情況。例如我們統計班級學生的成績,那麼一般是按照學號來進行統計,原來成績是無序排列的,這樣的話非常不適合於我們對成績的查詢,那麼一般我們進行成績查詢之前,先進行排序,如按照高分到低分的排序,這樣可以很快地查出本班的最高分和最低分,和成績比較靠前或靠後的學生。排序有很多種方法,常用的有三種:冒泡排序、選擇排序、插入排序等,下面我們就對這三種方