使用宏定義 在C語言中,宏是產生內嵌代碼的唯一方法。對於嵌入式系統而言,為了能達到效能要求,宏是一種很好的代替函數的方法。 寫一個"標準"宏MIN ,這個宏輸入兩個參數並返回較小的一個: 錯誤做法:#define MIN(A,B) ( A <= B ? A : B ) 正確做法:#define MIN(A,B) ((A)<= (B) ? (A) : (B) ) 對於宏,我們需要知道三點: (1)宏定義"像"函數; (2)宏定義不是函數,因而需要括上所有"參數"; (
1 . 用預先處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1) #define 文法的基本知識(例如:不能以分號結束,括弧的使用,等等) 2)懂得前置處理器將為你計算常數運算式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。 3)
一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
1。檔案的建立和讀寫 我假設你已經知道了標準級的檔案操作的各個函數(fopen,fread,fwrite等等).當然如果你不清楚的話也不要著急.我們討論的系統級的檔案操作實際上是為標準級檔案操作服務的. 當我們需要開啟一個檔案進行讀寫操作的時候,我們可以使用系統調用函數open.使用完成以後我們調用另外一個close函數進行關閉操作. #include #include #include #include int open(const char *pathname,int
本解釋 1、指標的本質是一個與地址相關的複合類型,它的值是資料存放的位置(地址);數組的本質則是一系列的變數。 2、數組名對應著(而不是指向)一塊記憶體,其地址與容量在生命期內保持不變,只有數組的內容可以改變。指標可以隨時指向任意類型的記憶體塊,它的特徵是“可變”,所以我們常用指標來操作動態記憶體。 3、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指標。 問題:指標與數組 聽說char a[]與char
歡迎進入記憶體這片雷區。偉大的Bill Gates 曾經失言:640K ought to be enough for everybody — Bill Gates
漢文書處理 現在要解決的問題是,嵌入式系統中經常要使用的並非是完整的漢字型檔,往往只是需要提供數量有限的漢字供必要的顯示功能。例如,一個微波爐的LCD上沒有必要提供顯示"電子郵件"的功能;一個提供漢字顯示功能的空調的LCD上不需要顯示一條"短訊息",諸如此類。但是一部手機、小靈通則通常需要包括較完整的漢字型檔。 如果包括的漢字型檔較完整,那麼,由內碼計算出漢字字模在庫中的位移是十分簡單的:漢字型檔是按照區位的順序排列的,前一個位元組為該漢字的區號,後一個位元組為該字的位號。每一個區記錄94個
問題:記憶體使用量 有人寫了一個將整數轉換為字串的函數:char *itoa (int n){ char retbuf[20]; sprintf(retbuf, "%d", n); return retbuf;} 如果我調用這個函數:char *str5 = itoa(5),str5會是什麼結果呢? 答案分析: 答案是不確定,可以確定的是肯定不是我們想要的 “5”。
基本解釋
第11章 其它編程經驗11.1 使用const提高函數的健壯性看到const關鍵字,C++程式員首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const定義常量,那麼相當於把火藥僅用於製作鞭炮。const更大的魅力是它可以修飾函數的參數、傳回值,甚至函數的定義體。const是constant的縮寫,“恒定不變”的意思。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。所以很多C++程式設計書籍建議:“Use const whenever you
第9章 類的建構函式、解構函式與賦值函數 建構函式、解構函式與賦值函數是每個類最基本的函數。它們太普通以致讓人容易麻痹大意,其實這些貌似簡單的函數就象沒有頂蓋的下水道那樣危險。每個類只有一個解構函式和一個賦值函數,但可以有多個建構函式(包含一個拷貝建構函式,其它的稱為普通建構函式)。對於任意一個類A,如果不想編寫上述函數,C++編譯器將自動為A產生四個預設的函數,如 A(void); // 預設的無參數建構函式 A(const A &a); // 預設的拷貝建構函式 ~A(void);
相信很多人都看過設計模式方面的書,大家有什麼體會呢?Bridge,Proxy,Factory這些設計模式都是基於抽象類別的。使用抽象對象是這裡的一個核心。
第8章 C++函數的進階特性 對比於C語言的函數,C++增加了重載(overloaded)、內聯(inline)、const和virtual四種新機制。其中重載和內聯機制既可用於全域函數也可用於類的成員函數,const與virtual機制僅用於類的成員函數。重載和內聯肯定有其好處才會被C++語言採納,但是不可以當成免費的午餐而濫用。本章將探究重載和內聯的優點與局限性,說明什麼情況下應該採用、不該採用以及要警惕錯用。8.1 函數重載的概念 8.1.1
概述 在很多情況下,尤其是讀別人所寫代碼的時候,對C語言聲明的理解能力變得非常重要,而C語言本身的凝練簡約也使得C語言的聲明常常會令人感到非常困惑,因此,在這裡我用一篇的內容來集中闡述一下這個問題。 問題:聲明與函數 有一段程式儲存在起始地址為0的一段記憶體上,如果我們想要調用這段程式,請問該如何去做? 答案 答案是(*(void (*)( ) )0)( )。看起來確實令人頭大,那好,讓我們知難而上,從兩個不同的途徑來詳細分析這個問題。
第10章 類的繼承與組合 對象(Object)是類(Class)的一個執行個體(Instance)。如果將對象比作房子,那麼類就是房子的設計圖紙。所以物件導向設計的重點是類的設計,而不是對象的設計。對於C++程式而言,設計孤立的類是比較容易的,難的是正確設計基類及其衍生類別。本章僅僅論述“繼承”(Inheritance)和“組合”(Composition)的概念。注意,當前物件導向技術的應用熱點是COM和CORBA,這些內容超出了C++教材的範疇,請閱讀COM和CORBA相關論著。10.1
處理功能鍵 功能鍵的問題在於,使用者介面並非固定的,使用者功能鍵的選擇將使螢幕畫面處於不同的顯示狀態下。例如,主畫面1:圖1 主畫面 當使用者在設定XX上按下Enter鍵之後,畫面就切換到了設定XX的介面,2:圖2
C#與Java的比較(轉二)5. 指代(Delegate)
函數,相信許多人也知道其重要性;一個檔案往往由一個或者多個函數構成的。然而可能許多人還不知道函數調用的一些深層問題,所以我寫的這篇文章一來是應了一個好朋友的要求而寫,二來希望一些朋友能夠從我這篇文章瞭解函數調用的機制。但是並不是每個人都可以完全讀懂這文章,想完全讀懂此文,我想必須具備三個條件:一、對於C語言有一定的瞭解,最起碼有一個整體的初步瞭解; 二、能夠讀懂UNIX/LINUX下的AT&T文法的彙編;AT&T彙編與Intel彙編的差別還是挺大的;這個條件可能一些人就不具備了,但是你通過閱讀
C# 2.0發布的時候,我們回頭看Java,總認為這個語言怎麼發展得這麼慢?但當C#發展到3.0的時候,它也開始顯示出臃腫之態了,這是否會也會帶來什麼連鎖效應呢?
c#頁面輸出一xml文檔在as裡邊讀取xml的值形成列表。sing System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using