是到哪個特定的資料夾?不同的平台有差別嗎?
A: 看compiler的設定,所以不同的平台會有差別
此路徑可以經由某個環境變數或是經由某個命令列選項(command line option)而改變。通常是在include這個資料夾內
例如:C:\Program Files\Microsoft Visual Studio 8\VC\include
http://www.vc-delphi.info/console-mode_vbmjc.htm
1.(b) 請舉出VC用的環境變數,是哪一個用來指定include目錄?因為VC可以安裝在各種不同的位置。
A:INCLUDE。
PC 上的 C 編譯器,就需要兩個環境變數: LIB:這個環境變數告訴編譯器說,必要的 libraries 在哪里(哪個磁碟目錄下) INCLUDE:告訴編譯器說,必要的 header files 在哪里(哪個磁碟目錄下) 另外,為了讓我們能夠在任何 working directory 都叫得到編譯器,當然我們必須設定 PATH。 從古早以來,一直到現在,C/C++ 編譯器都需要這三個環境變數。 C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat -->用來做環境變數上的設定
2.(a) #define name replacement_text,Name代表什麼?
A: compiler會先把name換成replacement_text在編譯
Name: 表將被代換掉的一串字
2.(b) name必須符合什麼條件?舉例來說,可以#define 123 0嗎?
一般來說必須由字母(一般是大寫字母)或底線_ 所組成。
一串數字是不被接受的
3.(a)sizeof是什麼?
A:sizeof 就是 C / C++ / C# 等三種程式語言所共有的 operator (注意:不是 function),顧名思義就是用以取得數值型別的位元組大小Ex: sizeof('J'), sizeof(char)C中sizeof('J'), sizeof(char) 輸出大小為: 4,1C++中sizeof('J'), sizeof(char) 輸出大小為:1,1
同樣是 sizeof('J'),在 C 與 C++ 語言就有不同的表徵,C++ 設計的本意是與 ANSI C 相容,但實際上存在些微的差異,這裡就是一個好例子。我們可從以上輸出得知,C++ 中 sizeof('J') 等同於 sizeof(char),所以我們看到輸出 "1",但是對於 C 語言來說,有著 "default to int" 的語意,所以等同於計算 sizeof(int),又在 32-bit 硬體架構來說,大致會輸出 "4",而 C# 與 C++ 對此有類似的表現,不過還是得考慮 sizeof('x') 或 sizeof(L'x') 的不同行為 (多國語文的 multi-character)。
當然 sizeof 既然是個 operator,可作的變化可多了,比方說觀察 object value assign 的變化,不過這裡就不列舉了,因為 sizeof 大多出現於與低階 I/O 或記憶體操作有關之處,不然就是在 header file 中的 macro,這都是隨著專案需求,很可能一下子用 C compiler,而轉眼改用 C++ compiler 編譯的程式碼,但倘若我們忽視語言層面的差異,將會造成許多難以偵測的錯誤
Ref: http://blog.linux.org.tw/~jserv/archives/001876.html
3.(b) 什麼是operator?跟Function的差異什麼?請舉出所有的operator。
1)operator是對operand作用(By Associativity),而function則是對傳進來的參數
2)http://www.difranco.net/cop2220/op-prec.htm
4.(a)#if中可以用and or not嗎?
A:可
#ifdef identifier 相等於 #if defined identifier
#ifndef identifier 相等於 #if ! defined identifier
Example:
#if !defined(RC_INVOKED) && !defined(__midl)
#include
#endif
4.(b) 請整理出#if所有可以用的operator?比如說告訴我>跟< 還有 == 能不能用。
以下為可以使用的operator:
< <=
> >=
== !=
and or not
5.#if中不能用:1).Sizeof 2).Casts 3).enum原因?
A: c的 preprocessor不處理型別名稱
#if中常數運算式的替換規則和macro一樣,#define ID 若ID在preprocessor有defined過用1L替代,否則用0L,任何integral constant 都被認為後面有L,所以運算式都被認為是long OR unsigned long
所以常數運算式在此有限制的,因他一定要是integer
(但#defien中的運算式,不被preprocessor計算(他只負責代換工作),所以#defien中可有sizeof 、casts、 enum constant)

沒有留言:
張貼留言