若干你不太可能用到的Free Pascal的techniques
(2 and the final)
十六,過程的參數
這個話題說過很多,就在上文~好吧,有形參實參。但是噁心的還有常參(前文說道),和類型不定參~ array of const,典型的delphi用法。(注意到這裡還是不定元素個數,當然也可用slice代替~)還有缺省參數。
其餘的不算參數,但也順帶講解一下。有inline標注,forward標記,有overload標記,這三個前文都有涉及,自己看罷~
十七,過程
type
IntProc = procedure (var Num: Integer);
procedure DoubleTheValue (var Value: Integer);
begin
Value := Value * 2;
end;
var
IP: IntProc;
X: Integer;
begin
IP := DoubleTheValue;
X := 5;
IP (X);
End.
這種用法叫過程類型。
注意,這種類型的引入或者調用或者更改,對於不熟悉的人士可能造成runtime error 216. GPE。
十七,字符串
String的0位是它長度的chr的返回值,這就是它最多只有255位的原因。“實操”中,可能覆蓋(override)它,如move,fillchar等(見後文),注意:
//for tripley by phoeagon
Var
A:string;
Begin
A:=’I love PASCAL’;
A[0]:=chr(0);
Writeln((a=’’)and(a[1]=’I’));
End.
運行結果是:TRUE。
自己理解。
另外字符串被compiler轉換編碼之類也是很痛苦的東西~不解釋。
十七、fillchar,sizeof,move~stack, heap, procedures&functions,~
Fillchar(destination, bytes to fill, pattern)
Fillchar用於填充一段連續的內存空間,按字節填充pattern。通常是:
Fillchar(dp,sizeof(dp),0);
//Which is often seen in the init part.
雖然常常填充0,常常用sizeof獲取字節數,但這不是一定的。
Move(source, destination, bytes);
Move用於拷貝一段連續的內存空間~
注意到move和fillchar爲什麽會快,這兩個過程省去了大量尋址和邊界檢查的時間。
然而,如果操~~~作的字符數比變量要大,它會干到變量外邊去,干到別人的地方去,最倒霉時可能跳出來程序已經申請的空間而崩潰~
所以,猥瑣而不推薦~
Stack和heap。
I386_Win32默認下F***Pascal會自己為堆棧和堆申請空間,就是說本身這個是幾乎不限制空間的(32-bit程序本身有4G的限制),只是受限於OS。但是你如果明明知道要多少空間,可以用編譯參數指定,這樣比不斷擴充空間快~~~一點點。
在intel流行的版本中,最多過程的參數有4K,過程內的變量不特別限空間。
編譯器對程序內的過程、函數數有限制。默認只有1024個子程序或函數可以被定義。這個限制可以通過修改fp附帶的src的compiler中的源碼并重新編譯放鬆,如可以讓一個程序有4096個子過程等等~
18、最最ws~
獨家公布:
在字符串中,兩個單引號相當于一個。
所以:
Writeln(‘’‘’‘’);
會打印出2個單引號(chr(39))!
現在ws完畢,希望大家沒有吐到太嚴重。
請各位平靜情緒,如果難以平靜的可以看看煎蛋(www.jandan.net)上曾經有的欄目,每日一美女。
什麽?你是女生?誰讓你進來的?我一開始警告過~這就是我警告的原因~這個欄目對你沒有舒緩情緒的作用~還是自己買個geekini玩去~
給我一個F***Pascal,我可以這么WS~!
(如果三個小時呢您身體不適的症狀沒有減輕,或者出現或持續出現嘔吐不止、脈搏減弱、瞳孔擴散等症狀,請立即撥打120或999.)
如果您覺得還不夠ws,可以討論一下NCE中的sophie和Borland的Delphi的區別和聯繫~NCE1 lesson 7:(圖片自己搜)
MR. BLAKE: Good morning.
STUDENTS: Good morning, Mr. Blake.
MR. BLAKE: This is Miss Sophie Dupont.
Sophie is a new student.
She is French.
MR. BLAKE: Sophie, this is Hans.
He is German.
HANS: Nice to meet you.
……
|