※ 引述《coldstar.bbs@bbs.cs.nctu.edu.tw (灑落的月光伴著)》之銘言:
> 我不是這個意思
> 對 compiler 來說,要把 printf("%d", b) 最佳化成 printf("10")
> 應該需要 compiler 進 printf 裡實地觀察一遍才知道的吧?
> 但是現在的 compiler 已經這麼聰明了?
現在的 C compiler 幾乎不會去管 library 裡面的東西,
只要是跟 binary code 扯上關係的,
近代的 C compiler 都不會去管它。
不過並不是沒有特例,
當 printf 被 C compiler 視為 builtin function 時,
compiler 就有機會對它做最佳化,
非常早期的幾個 C compiler 有把 printf 視為 builtin,
所以可以做類似的處理,
但是現在都很少見了。
至於 builtin function 的效果,
舉個例子來說,
gcc 對 i386 平台設計有把 pow() 這個 function 視為 builtin,
所以當傳入的數值都是編譯期已知的,
就會直接變成常數,
可以試試看在 C 寫 pow(2, 16),
然後用 gcc -S 看 assembly code 的輸出。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-150-86.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎