高等 C 語言 -- 使用 Inline 函數

高等 C 語言

簡介

字串

指標與陣列

函數

結構

物件導向

記憶體

檔案

錯誤處理

巨集處理

C 與組合語言

資料結構

動態字串

動態陣列

鏈結串列

雜湊表

開發環境

Make

Cygwin

MinGW

DevC++

wxDevC++

編譯器

gcc 編譯器

TinyCC 編譯器

LCC 編譯器

應用主題

CGI 程式

GNU 程式

視窗程式

影像處理

練習題

訊息

相關網站

參考文獻

最新修改

簡體版

English

程式範例

檔案:inline.c

inline int max(a,b) {
  return (a>b?a:b);
}

inline int min(a,b) {
  return (a<b?a:b);
}

int main() {
  int x = max(3,5);
  int y = min(3,5);
  printf("max(3,5)=%d\n", x);
  printf("min(3,5)=%d\n", y);
}

巨集展開結果

執行 gcc -E inline.c -o inline.i 指令之後,就會得到 inline.i

檔案:inline.i

inline int max(a,b) {
  return (a>b?a:b);
}

inline int min(a,b) {
  return (a<b?a:b);
}

int main() {
  int x = max(3,5);
  int y = min(3,5);
  printf("max(3,5)=%d\n", x);
  printf("min(3,5)=%d\n", y);
}

來自 jserv 的建議

原本我寫了這句:「將函數巨集化 — (inline) 使用 inline 可以增快速度,但也會讓程式碼增大」,但似乎有很大問題,所以我就拿掉了,但是我搞不清楚問題在哪?所以忠實呈現 jserv 的來信建議。

"將函數巨集化 — (inline) 使用 inline 可以增快速度,但也會讓程式碼增大。"

=> 這嚴重誤導讀者!
C99 的 inline 行為和 macro 不同,請見:
http://www.greenend.org.uk/rjk/tech/inline.html

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License