2018-10-18-W6-計算機概論A班 == ## On Linux ### 展開巨集 (Macro) 定義 $ clang -E file.c 其他 compiler: cc, gcc, clang ### 在 compile 臨時加環境參數,就不用每次都改檔案 $ clang -DDEBUG file.c 效果等同於程式碼內 `#define DEBUG` $ clang -DVALUE_Z=7 file.c ### 只編譯成 object file $ clang -c output: a.o $ clang define.o -o define.exe ### EOF Ctrl-d 會在螢幕上 echo 出 D,不好看,在程式最後 print 一行字就能蓋掉它 ### Redirect file 進去程式 a.out < a1.dat 或 cat a1.dat a2.dat | a.out ## On Windows: Visual Studio x64 Native Tools Command Prompt PS: 其實 Windows 下指令大小寫沒差,Unix 有差,老師用大寫只是為了好看 微軟加參數習慣用斜線,Unix 是習慣減號 ### 展開巨集 (Macro) 定義 type file.c (印出檔案) CL /E file.c ### 在 compile 臨時加環境參數 CL /DVALUE_Z=7 /DDEBUG file.c default output: filename.exe, filename.obj ### Q: file.obj 是什麼? A: compiler 會先編譯成機械碼(machine code)的 obj 檔,再讓 linker 匯入其他 include library 的東西。 在做大型專案時會把程式碼分散在很多個 .c 檔,若只改動其中一個 .c 檔,其他的編譯出來的 .obj 就不用動,能節省編譯時間 ### EOF 要按三次 Ctrl-Z 會被 Preprocessor 展開成 (-1)