資工3C 95441159 藍子強
Preprocessor
前置處理器的三大功能:
1.巨集處理
2.包含檔案
3.條件編譯
一、巨集處理:
巨集指令為代換用途,以巨集名來代表一字串。
格式:#define 巨集名 字串 (不用加分號;)
前置處理器碰到 #define 定義一個巨集名時,會記下此巨集名及其代表之
字串當程式之任何地方使用到巨集名時,前置處理器會將巨集名以其代表
之字串代換之。
•例如:#define PI 3.1416 (程式中使用PI)。
•巨集名可以使用大小寫,習慣上使用大寫,避免和程式中的變數搞混。
•巨集名亦可義成運算式,如:#define f(x) x*x+2,則f(a)會以a*a+2代換之,
但要注意f(a+1)會代換成a+1*a+1+2,此為錯誤,應寫為#define f(x) (x)*(x)+2。
•可用於程式發展時除錯之用:
•#undef:使用#define定義的巨集名,可以使用#undef使定義缺失效。
二、包含檔案:#include
#include是一前置處理指令可以將指定的檔案包含到主程式內。
例如: #include 即是將標準輸出入函數標頭檔stdio.h包含到程式裡
格式:
1.#include <檔名>
指示compiler到指定的路徑去尋找。例如:C:\tc\include
2.#include "檔名"
指示compiler到工作目錄去尋找。
•標頭檔內常存放一些常數定義、巨集定義及常用的函數,
例如:stdio.h內即定義出EOF、getchar、putchar...等。
•C語言尚有許多實用的函數,其中合ANSI標準的函數都放在標準C函數庫內,
而其宣告及常數、巨集定義都放在如下表所列的標準標頭檔內。
三、條件編譯
(一)若巨集名稱已被定義,則區段敘述會被編譯;反之,巨集名稱沒被定義,則區段敘述不會被編譯
(二)若巨集名稱未被定義,則區段敘述會被編譯;反之,巨集名稱已被定義,則區段敘述不會被編譯
(三)若常數運算是經計算後的結果得到非零的值,則區段敘述一會被編譯,而區段敘述二不會被編譯,
這個動作是在程式編譯之前,所以常恕運算是不能有變數,只能有常數及運算子。
#if常數運算式
/*區段敘述一*/
#else
/*區段敘述二*/
#endif
條件編譯的另一個功用是讓較舊的程式碼變成「註解」。由於註解(/* */)的裡面不能還存有註解(不可有巢狀註解),
所以你不能將存有註解的舊程式碼,再以/* 和*/ 包起來,因此可以使用#ifdef 來解決這個問題。
資料來源:
http://www.ylsh.ilc.edu.tw/~blpan/c/c5_3.htmlhttp://www.riarock.net/qopsblog/2006/pdf/C_Ch07.pdf----------------------------------------------------------------------
加分題:
F#
F#是由微軟發展的為微軟.NET語言提供運行環境的程序設計語言,是函數程式語言(FP,Functional Programming),
函數程式語言最重要的基礎是Lambda Calculus。它是基於OCaml的,而OCaml是基於ML函數程式語言。有時F# 和 OCaml 的程式是可以交互編譯的。
F#已經接近成熟,支援Higher-Order Function、Currying、Lazy Evaluation、Continuations、Pattern Matching、Closure、
List Processing、Meta-Programming。這是一個用於顯示.NET在不同編程語言間互通的程序設計,可以被.NET中的任意其它代碼編譯和調用。
2002年微軟開始由Don Syme帶領研發F#,從C#,LINQ和Haskell中獲取了經驗,2005年推出第一個版本,
2007年7月31日釋出1.9.2.9版。2007年底,微軟宣布F#進入產品化的階段。
資料來源:
http://zh.wikipedia.org/w/index.php?title=F_Sharp&variant=zh-hant